我一直在嘗試最近使用Symfony 2的形式,這對於簡單的表單來說非常好。用Symfony格式分離問題
但是,對於在選擇框或類似的東西中使用,我經常想要一個表單中的關聯實體列表。在一些相關博客文章和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
);
}
有沒有人知道這是如何實現的?
好的,通過選項傳遞它,但我怎麼可以傳遞一個實體列表的形式控制類型'實體'。根據Symfony文檔,我只能查詢實體... – Stivni 2013-03-14 18:45:04
在您的問題中顯示的方式是正確的 - 只需將實體集合傳遞給「實體」類型的「選擇」選項即可。 – 2013-03-14 19:25:01