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

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

参考


アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら