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

6
我遇到了一个无法解决的问题。
在我的表单中,有一个过滤实体的要求。
一些背景信息:
该表单用于向工作流步骤添加新任务。可以选择的任务取决于用户所处的工作流阶段、分配给工作流的产品以及管理该工作流的公司。
我尝试将过滤查询添加到“query_builder”部分,并尝试将实体存储库的查询结果放入数组中的“choices”部分。
然而,表单始终返回正在处理的字段无效。最令人困惑的部分是,没有“choices”字段时,即当它带入该实体的所有记录时,选择框完全相同(多了一些额外的记录)-名称和书写方式的模式。这很好用。所以我完全不知道发生了什么。
表单元素代码:
->add('instructionAction', 'entity', array(
            'label' => 'Action',
            'empty_value' => 'Select Action',
            'required' => true,
            'class' => 'ApplicationTrackpadCommonBundle:InstructionAction',
            'property' => 'description',
            'choices' => $this->instructionActionRepository->findAllForCaseInstruction( $options['caseInstructionId'] )
            )
)

我不确定能够发布多少代码,因为这是客户工作。我使用的查询语句正确地填充了下拉框,就像没有查询一样,即使我选择所有实体而没有任何WHERE子句,同样的问题仍然存在。

感谢您的所有帮助。


你说如果删除“choices”选项,一切都正常工作?(当然它会显示所有实体)你传递给表单的数据有效吗?我的意思是在受限列表中是否可用? - Geoffroy
2个回答

3

类似于这样:

->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传递变量。

就像我在原帖中所说的那样,使用查询构建器时我遇到了相同的错误。问题是,当我添加其他实体以过滤结果集时,基本的QB(没有多个“FROM”或“WHERE”)确实可以工作,但它不起作用。 - jrdn

1

您是否尝试使用“query_builder”而非“choices”选项?我认为当您使用实体类型时,“choices”选项会被“query_builder”直接覆盖。就像Symfony文档这里所描述的那样。
如果仍然无法解决问题,建议您查看此处


就像我在原帖中所说的,使用查询构建器时出现了相同的错误。问题是,在基本的QB(没有多个FROM或WHERE)下,它可以工作,但是当我添加其他实体来过滤结果集时,它将无法工作。 - jrdn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接