将“选择”选项添加到“实体”类型表单字段会使表单 - Symfony2失效


Adding 'choice' option to 'entity' type form field invalidates form -- Symfony2

我遇到了这个问题,我无法解决。

在我的一个窗体上,需要筛选实体。

一些背景:

表单用于向工作流步骤添加新任务。可以选择的任务取决于用户在工作流中的哪个阶段、分配给工作流的产品以及管理该工作流的公司。

我尝试将过滤查询添加到"query_builder"部分,并尝试将实体存储库中的查询结果放入数组中的"选择"部分。

但是,表格总是返回,说我正在处理的领域无效。最令人费解的是,如果没有"选择"字段,例如,当它引入该实体的所有记录时,选择框完全相同(有一些额外的记录( - 名称和编写方式的模式。这很好用。所以我完全不知道发生了什么。

表单元素代码:

->add('instructionAction', 'entity', array(
            'label' => 'Action',
            'empty_value' => 'Select Action',
            'required' => true,
            'class' => 'ApplicationTrackpadCommonBundle:InstructionAction',
            'property' => 'description',
            'choices' => $this->instructionActionRepository->findAllForCaseInstruction( $options['caseInstructionId'] )
            )
)

我不确定我可以发布多少代码,因为它是用于客户端工作。我使用的查询像没有查询一样正确填充下拉框,即使我选择没有任何WHERE子句的所有实体,也会出现同样的问题。

感谢您的任何和所有帮助。

像这样:

->add('instructionAction', 'entity', array(
    'required' => true,
    'class' => 'ApplicationTrackpadCommonBundle:InstructionAction',
    'query_builder' => function(EntityRepository $er) use ($user) {
        return $er->createQueryBuilder('c')
            ->where('c.user = :user')
            ->setParameter('user', $user)
            ->orderBy('c.name', 'ASC');
 }))

您可以使用 use 传递变量。

您是否尝试使用"query_builder"而不是"选择"选项?我认为当您使用实体类型时,"选择"选项直接被"query_builder"覆盖。就像这里的symfony文档中描述的那样。
如果它仍然不起作用,我建议你应该看看这个。