繁体   English   中英

Symfony2:如何将Doctrine实体数组添加到FormBuilder

[英]Symfony2: how to add a Doctrine Entity Array to FormBuilder

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

看到您实现ChoiceListProvider Symfony内置了许多实现,但是您可能需要像SimpleChoiceListProvider这样简单的东西。

  1. EntityManager实例传递给表单(通过构造函数或选项)
  2. 将表单字段定义为choice而不是entity
  3. 将其choice_list设置为new MySimpleChoiceLIstProvider($this->entityManager)

您可以(可能将)不只是将EntityManager传递给提供程序,正如您所说的“将根据特定条件选择行”。 如果该条件源自表单本身,则可能应该通过FormEvents ,这将使您可以访问数据对象。

希望这可以帮助。

使用您编写的内容,没有任何理由QueryBuilder无法正常工作。

你应该有这样的东西:

    $builder
            ->add('fieldname', 'entity', array(
                'class' => 'Path\to\Entity',
                'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
                                        return $er->yourFunction();
                                    },
                'required' => true
                ))

使用“ yourFunction”作为存储库的功能,例如“ getSomeEntities”。

您能告诉我们为什么它不起作用吗? 谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM