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

标签 symfony entity query-builder

这是我的问题。 我在 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/

相关文章:

mysql - Doctrine 具有不同结果的多对多关系查询

wcf - 缺少 .NET 3.5 Entity Framework 的某些内容?

php - orWhere 在 Laravel 查询生成器中查询

symfony - 使用 EXISTS 查询 Doctrine Symfony2

php - Class 似乎不是一个托管的 Doctrine 实体。你忘记映射了吗?

forms - 如何在 Symfony 项目中以嵌入形式从 Twig 访问底层对象

java - JSON 解析为 TextView Android API

api - Google Analytics API - 与 Symfony2 集成

asp.net-mvc - ASP.NET MVC 4 引用单父实体的多个外键

用于查找数据匹配或实体解析误报的 SQL 查询