私は最近Symfony2フォームを使おうとしていますが、これは単純なフォームに非常に適しています。
しかし、-選択ボックスなどで使用するために-フォーム内の関連するエンティティのリストが必要になることがよくあります。いくつかのブログ投稿とSymfonyのドキュメントで、彼らはこのようなものを提案しています...
//BlogPostType implements FormTypeInterface
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('category', null, array(
'property' => 'name',
'query_builder' => function(EntityRepository $er) use($options) {
return $er->createQueryBuilder('category')->orderBy('category.name', 'ASC');
}
);
}
ドメイン駆動設計、特に関心の分離に多くの注意を払っているので、関連するエンティティをSymfonyのカスタムフォームタイプにバインドする唯一のオプションは、カスタムでクエリすることであるとは信じがたいです。フォームタイプ。
私の意見では、フォームはクエリを実行するべきではないため、これはSoCに違反します。このように、フォームは常に同じエンティティを取りますが、表示するエンティティを選択するのはフォームではありません...
フォームビルダーにフォームの作成を依頼するコントローラーは、関連するオブジェクトをカスタムフォームタイプコンストラクターなどに挿入する必要があります...
//BlogPostType implements FormTypeInterface
public function __construct(array $categories) {
$this->categories = $categories;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('category', null, array(
'property' => 'name',
'choices' => $this->categories
);
}
誰かがこれをどのように達成できるか知っていますか?