web-dev-qa-db-ja.com

hook_form_alter()で$ entityを取得するにはどうすればよいですか?

hook_add_form()はパラメーターとして_$entity_type_および_$entity_を取得しますが、hook_form_alter()にはこれらのパラメーターはありません。

hook_form_alter() in Drupal 7)でエンティティタイプとエンティティオブジェクトを取得するにはどうすればよいですか?

1
Lub

このようなことができるといいと思います。

if ($form_state->getFormObject() instanceof \Drupal\Core\Entity\EntityFormInterface) {
  $entity = $form_state->getFormObject()->getEntity();
  $entity_type = $entity->bundle();
}   

更新:Drupal 7では、次のように実行する必要があります。

$node = $form['#entity_type']; // E.g this could be, (#node, #user etc.)

このサイトを見てみましょう 重複議論

5
user72672

エンティティタイプはそれぞれD7で独自のフォームを実装しましたが、一般的なものはありませんでした。あなたは、コードの各ビットの作者がその時に決定したものに翻弄されています。

たとえば、コアエンティティタイプのsomeとの整合性を見つけることができます。

  • ノード-> $form['#node']
  • ユーザー-> $form['#user']
  • コメント-> $form['#comment']

しかし、すべてではありません。

  • taxonomy_term-> $form['#term']

興味のある特定の種類のエンティティをターゲットにして、それぞれの正しい配列キーを決定し、後でアクセスできるようにマップに格納する方が簡単な場合があります。

1
Clive