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,
),