在 symfony2.1 上的“entity”buildForm 上使用“query_builder”时,“此值无效”

2024-04-19

这是我的问题。 我用buildFormsymfony 2.1 上的方法来构建我的表单。 使用以下代码一切正常:

$builder->add('combat','entity',array(
                    class' => 'KarateCompetitionBundle:CompetitionCombat',
                    'empty_value' => 'Sélectionner un combat'));

但我只想过滤并显示一些Combat。这就是为什么我必须使用query_builder选项。当我这样做时,我得到了This value is not valid错误信息。 这是代码:

$builder->add('combat','entity',array(
                  'class' => 'KarateCompetitionBundle:CompetitionCombat',
                  'empty_value' => 'Sélectionner un combat',
                  'query_builder' => function(CombatRepository $cr) {
                      return $cr->getAllWithoutBilanQueryBuilder();}));

我至少减少了代码(即不对getAllWithoutBilanQueryBuilder方法)以便能够发现问题。

public function getAllWithoutBilanQueryBuilder(){
    $queryBuilder = $this->getEntityManager()->createQueryBuilder();
    return $queryBuilder->select('c')->from('KarateEntrainementBundle:CompetitionCombat', 'c');

}

我比较了每种情况下生成的 html 代码,它们是相同的。

I put a var_dump($object)将表单与请求绑定后在控制器上$form->bind($request)看来当我使用query_builder选项combat为空,而如果我不使用它,则它不为空。

我无法理解为什么? 我在网上发现很少有帖子提出同样的问题,但没有一个给出答案。 这里是否可能存在 symfony 问题或者我做错了什么?


我遇到了完全相同的问题,并且 - 就我而言 - 将其追溯到 Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader。

验证表单时,通过向查询生成器添加 IN() 子句,通过 ORMQueryBuilderLoader::getEntitiesByIds() 中的主键加载实体。就我而言,这个 IN() 子句无效,所有可选择的实体都被返回。

这反过来又导致 Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToValuesTransformer::reverseTransform() 抛出 TransformationFailedException,因为加载的实体和提交的选择的数量不同。

我想这个特定错误还有其他可能的原因。您可以尝试以下方法:

  • 查看生成的查询,手动运行它并确保它返回only选定的值
  • 在 Symfony\Component\Form\Form 中,尝试输出捕获的 TransformationFailedException 并查看它会将您引向何处。
  • 如果以上都不合理,请将一些调试输出添加到 Symfony\Component\Form\Extension\Validator\Constraints\FormValidator 并查看是否可以稍微缩小范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 symfony2.1 上的“entity”buildForm 上使用“query_builder”时,“此值无效” 的相关文章

随机推荐