add('combat','entity',array( -6ren">
gpt4 book ai didi

symfony - "This value is not valid"在 symfony2.1 上的 "query_builder"buildForm 上使用 "entity"

转载 作者:行者123 更新时间:2023-12-02 02:05:42 24 4
gpt4 key购买 nike

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

$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 代码,它们是相同的。

在将表单与请求 $form->bind($request) 绑定(bind)后,我在 Controller 上放置了一个 var_dump($object) ,看起来当我使用 query_builder 选项 combat 为 null,如果我不使用它则它不为 null。

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

最佳答案

我遇到了完全相同的问题,并且 - 在我的例子中 - 追溯到 Symfony\Bridge\Doctrine\Form\ChoiceList\ORMQueryBuilderLoader。

当表单被验证时,实体通过 ORMQueryBuilderLoader::getEntitiesByIds() 中的主键加载,方法是向查询构建器添加 IN() 子句。在我的例子中,这个 IN() 子句是无效的,所有可选择的实体都被返回。

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

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

  • 查看生成的查询,手动运行它并确保它返回选定的值
  • 在 Symfony\Component\Form\Form 中,尝试输出捕获的 TransformationFailedException 并查看它会将您引向何处。
  • 如果以上都不合理,请将一些调试输出添加到 Symfony\Component\Form\Extension\Validator\Constraints\FormValidator 并查看是否可以缩小范围。

关于symfony - "This value is not valid"在 symfony2.1 上的 "query_builder"buildForm 上使用 "entity",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15192735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com