Symfony2:如何向FormBuilder添加一个Doctrine Entity Array

时间:2013-11-20 02:24:52

标签: php entity-framework symfony doctrine-orm doctrine

我正在使用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数组添加到我的表单作为选择列表?

2 个答案:

答案 0 :(得分:1)

看到您实施ChoiceListProviderSymfony内置了许多实现,但您可能需要像SimpleChoiceListProvider这样简单的内容。

  1. EntityManager实例传递给表单(通过构造函数或选项)
  2. 将表单字段定义为choice,而不是entity
  3. 将其choice_list设置为new MySimpleChoiceLIstProvider($this->entityManager)
  4. 您可以(可能会)将超出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”。

你可以告诉我们为什么它不起作用吗? 谢谢