gotohayato.com

moon indicating dark mode
sun indicating light mode

Drupal 7 で drupal_attributes() の引数エラー

2015/08/08Drupal 7

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

参考

  • Render Arrays in Drupal 7 | Drupal.org

後藤隼人
ウェブサイト制作・ウェブアプリ開発やマーケティングをしています。
GitHub
© 2020 gotohayato.com
サイトについてタグアーカイブメッセージを送る