web-dev-qa-db-ja.com

フィールドが空かどうかを確認する

$ nodeオブジェクトがあるときに、フィールドが空であることを確認するにはどうすればよいですか?.

私はこれを可能な解決策として見つけました:

$field = field_get_items('node', $node, 'field_post_image');

私は今チェックできます:

[〜#〜]更新[〜#〜]。アップ!これは信頼できませんが、昨日はうまくいくと約束しました。

isset($field);

しかし、もっと良い方法があるのか​​しら。

私を啓発します

17
corbacho

ドキュメント を読んだ場合、データがない場合、関数はFALSEを返します。 FALSEを変数に代入して実際に何かに設定されているため、isset()は実際には失敗します。正しい構文は次のとおりです。

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}
30
Sam152

次のスニペットを使用して、フィールドが空かどうかを確認できます。

_$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}
_

さまざまな条件でさまざまなフィールドが空と見なされるため、このコードはより安全です。たとえば、 file_field_is_empty()number_field_is_empty() 、および taxonomy_field_is_empty() の違いを参照してください:taxonomy_field_is_empty()チェック_$item_パラメータのtidプロパティ、number_field_is_empty()値をチェックします同じパラメーターのプロパティ。カスタムフィールドでは、フィールドが空であると見なすために、より複雑な条件を検証する必要がある場合があります。

ドキュメントに記載されている hook_field_is_empty() の説明は次のとおりです。

フィールドタイプの空のアイテムを構成するものを定義します。

8
kiamlaluno

$content['field_name']['#items'][0][value])なので、式でフィールドが空かどうかを判断できます

(!empty($ content ['field_name'] ['#items'] [0] [value]))

どこ field_nameは、目的のフィールドの名前と一致します。

2
eduardocs

Drupal 8

誰かがD8で同じ答えを必要とする場合、それが私のフィールドをテストするために行うことです。

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
1
Pauleau