Drupal 7 で drupal_attributes() の引数エラー
Drupal 7 で開発をしていると、次のようなメッセージで怒られることがあります。
Recoverable fatal error: Argument 1 passed to drupal_attributes() must be of the type array, null given, called in ...
今回はこの問題の原因と対策について。
原因と対策
原因は、エラーメッセージのとおり drupal_attributes()
への引数が正しく渡されていないことです。
drupal_attributes()
は Render array 、 theme 関数周りでよく使われているので、動いているコードの中でそのあたりのパラメータが不足していないか確認するとよいでしょう。
Render array の場合は theme
などで指定されている theme 関数にさかのぼって必須引数をチェックします。
概念的な説明だけだとわかりづらいのでサンプルをあげてみます。
たとえば次のような形で theme_link()
を呼び出すようなコードだとエラーが発生します。
$link = array(
'#theme' => 'link',
'#text' => t('Go back'),
'#path' => $uri,
);
一見わかりづらいのですが、必須のパラメータ options
が足りていません。
次のように修正するとエラーはなくなります。
$link = array(
'#theme' => 'link',
'#text' => t('Go back'),
'#path' => $uri,
'#options' => array('attributes' => array()),
);
おおもとの theme 関数を参照するのは少し手間ですが、スッキリ問題が解決できるので「急がば回れ」だと思います。
ちなみに上記のリンクを生成するコードは '#theme' => 'link'
ではなく '#type' => 'link'
を使うと余計な options
が要らなくなるのでこちらがおすすめです。
'link' => array(
'#type' => 'link',
'#title' => t('Go back'),
'#href' => $uri,
),