首页 文章

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

提问于
浏览
0

我正在使用Symfony和Doctrine,我有一个函数,它将根据特定条件选择行:

$entities = $repository->getSomeEntities();

现在我想在选择列表中渲染这些实体,我检查了 entity FormType但我无法查找.1377481_m .

例:

$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 回答

  • -1

    看到你实现 ChoiceListProvider . Symfony 中内置了许多实现,但您可能需要像 SimpleChoiceListProvider 这样简单的内容 .

    • EntityManager 实例传递给表单(通过构造函数或选项)

    • 将表单字段定义为 choice ,而不是 entity

    • 将其 choice_list 设为 new MySimpleChoiceLIstProvider($this->entityManager)

    您可以(可能会)将 EntityManager 之外的内容传递给提供者,如您所说"will select rows based on specific criteria" . 如果该条件源自表单本身,您应该通过 FormEvents 来执行此操作,这将使您可以访问数据对象 .

    希望这可以帮助 .

  • 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” .

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

相关问题