8

私が知りたいのは、エンティティに一致するフォームを作成するための最良の方法です。

  • コードまたはフォーム注釈を使用してフォームを手動で作成しますか?
  • エンティティからの注釈を使用していますか?

いくつかの異なる例を見てきました。@Annotationを使用しているものと@Formを使用しているものがありますか?誰かが違いを説明してもらえますか?

関連する/ネストされたエンティティを持つエンティティの場合、すべてのエンティティにカスタムハイドレーターを提供する必要がありますか?Doctrineにはすでにハイドレーターインターフェースを実装するものがあるのではないかと思いますか?

要約するには:-エンティティからフォームを作成するための最良の方法。-@Formと@Annotationの違い-Doctrineにはエンティティ用のハイドレーターがありますか?

4

1 に答える 1

12

まず最初に:注釈はスピードキラーです。アノテーションビルダーを使用する場合は、作成したオブジェクトを常にキャッシュしてください。ただし、注釈はフォームを実行するための最も簡単な方法でもあります;)

2番目:ハイドレーター。ZF2フォームをDoctrine2と組み合わせて使用​​する場合、内部にあるDoctrineEntityHydratorを使用することをお勧めします。次のコードを検討してください。

$form = new ReferenzwertForm();
$form->setHydrator(new DoctrineEntity($serviceLocator->get('Doctrine\ORM\EntityManager')))
     ->setObject(new Referenzwert())
     ->setInputFilter(new ReferenzwertFilter())
     ->setAttribute('method', 'post');
return $form;
  • ReferenzwertForm()はタイプですZend\Form\Form Object
  • DoctrineEntity()はタイプですDoctrineORMModule\Stdlib\Hydrator\DoctrineEntity
    • DoctrineEntityには、提供されたEntityManagerが必要です。ZF2でDoctrine2を使用する場合は、これに精通している必要があります。
  • Referenzwert()はエンティティオブジェクトです

アノテーションを使用せず、別のエンティティを参照している場合は、適切なフォーム要素を使用していることを確認してください(ほとんどの場合、これはselect要素です(BlogEntityなどのCategoryEntityの選択など)。

$this->add(array(
    'name' => 'type',
    'type' => 'DoctrineORMModule\Form\Element\DoctrineEntity',
    'options' => array(
          'label' => 'Choose a MyEntity',
          'object_manager' => $this->getEntityManager(),
          'target_class' => 'Namespace\Entity\MyEntity',
          'property' => 'name'
    ),
    'attributes' => array(
        'required' => true
    )
));

ご覧のとおり、Form要素はentityManagerについても知っている必要があります。これが、理想的には、最初のコード例を別のセッターで拡張して、entityManagerをフォームオブジェクトに挿入する必要がある理由です。

$form->setEntityManager($serviceLocator->get('Doctrine\ORM\EntityManager'))
     ->set()//all the other stuff

一般的に最善のアプローチは何ですか?ないでしょう。速度を上げるために、注釈だけがキラーです。キャッシュされたバージョンを使用すると役立つはずですが、ZF2でのキャッシュに関する個人的な経験はまだありません。IDEが多くのものをサポートしているという理由だけで、注釈の外で手作業からフォームを作成するのが好きですが、フォームの注釈は確かにサポートしていません:D

これがあなたに少し役立つことを願っています、そして私は文脈からあまり多くを書きませんでした:P

于 2012-11-20T21:55:33.647 に答える