$ nodeオブジェクトがあるときに、フィールドが空であることを確認するにはどうすればよいですか?.
私はこれを可能な解決策として見つけました:
$field = field_get_items('node', $node, 'field_post_image');
私は今チェックできます:
[〜#〜]更新[〜#〜]。アップ!これは信頼できませんが、昨日はうまくいくと約束しました。
isset($field);
しかし、もっと良い方法があるのかしら。
私を啓発します
ドキュメント を読んだ場合、データがない場合、関数はFALSE
を返します。 FALSE
を変数に代入して実際に何かに設定されているため、isset()
は実際には失敗します。正しい構文は次のとおりです。
$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
//Do something with the field
}
else{
//There are no results
}
次のスニペットを使用して、フィールドが空かどうかを確認できます。
_$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() の説明は次のとおりです。
フィールドタイプの空のアイテムを構成するものを定義します。
($content['field_name']['#items'][0][value]
)なので、式でフィールドが空かどうかを判断できます
(!empty($ content ['field_name'] ['#items'] [0] [value]))
どこ field_name
は、目的のフィールドの名前と一致します。
誰かがD8で同じ答えを必要とする場合、それが私のフィールドをテストするために行うことです。
if ($entity->hasField('field_event_date_start')
&& !$entity->get('field_event_date_start')->isEmpty()) {
// Do something ...
}