我正在使用Symfony和Doctrine,我有一个将根据特定标准选择行的函数:
$entities = $repository->getSomeEntities();
现在我想在选择列表中渲染这些实体,我检查了entity
FormType但我无法实现我正在寻找的东西。
示例:
$builder->add('id','entity', array(
'class' => 'Path\To\Entity',
'property' => 'id'
));
上述代码工作正常,但它选择了所有实体。
我检查了Symfony文档http://symfony.com/doc/current/reference/forms/types/entity.html,似乎实现这一点的唯一方法是使用query_builder选项,它不适合我的情况
是否有将$entities
数组添加到我的表单作为选择列表?
答案 0 :(得分:1)
看到您实施ChoiceListProvider
。 Symfony
内置了许多实现,但您可能需要像SimpleChoiceListProvider
这样简单的内容。
EntityManager
实例传递给表单(通过构造函数或选项)choice
,而不是entity
choice_list
设置为new MySimpleChoiceLIstProvider($this->entityManager)
您可以(可能会)将超出EntityManager
的内容传递给提供商,因为您说“将根据特定条件选择行”。如果该条件来自表单本身,您应该通过FormEvents
进行,这将使您可以访问数据对象。
希望这有帮助。
答案 1 :(得分:-1)
根据您所写的内容,QueryBuilder没有理由不起作用。
你应该有类似的东西:
$builder
->add('fieldname', 'entity', array(
'class' => 'Path\to\Entity',
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
return $er->yourFunction();
},
'required' => true
))
“yourFunction”是您的存储库的一个功能,例如“getSomeEntities”。
你可以告诉我们为什么它不起作用吗? 谢谢