我一直在尝试最近使用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