【问题标题】:Overriding default behaviour of Symfony2 validation (with QueryBuilder)覆盖 Symfony2 验证的默认行为(使用 QueryBuilder)
【发布时间】:2012-09-04 07:58:43
【问题描述】:

我必须在数据库中插入实体数据时遇到问题。

实体与 Symfony2 的实体字段一起显示,我使用查询生成器仅显示“活动”数据。 (见下文)

可以通过 Ajax 将数据添加到 Symfony 生成的“选择”中(新的“教授”不活跃 (is_active = 0))。但是,当我选择通过 Ajax 添加且未激活的数据时,出现此错误:“此值无效。” => 那是因为 Symfony2 由于 de querybuilder "where" 语句而添加了自动验证。

是否可以覆盖默认的 Symfony2 行为,以便也可以验证通过 Ajax 元素添加的非活动 (is_active = 0 (boolean)) 元素(与查询构建器“where”语句不匹配的项目下面?

$builder->add('professionA', 'genemu_jquerychosen_entity', array(
    'class' => 'SportUserBundle:Profession',
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('prof')
            ->where('prof.is_active = :active')
            ->setParameters(array('active' => '1'))
            ->orderBy('prof.name', 'ASC');
    },
));

谢谢!

【问题讨论】:

  • 你能在包含一位带ajax的老师后显示select的源代码吗(感谢firebug?)
  • 我会向表单传递一个选项,以判断 query_builder 是否必须只选择活跃的职业。
  • 是的,但问题是我通过 Ajax 添加了不活跃的职业,这与我认为应该提前知道所有可能选择的 query_builder 语句冲突?

标签: php validation symfony symfony-2.1


【解决方案1】:

最简单的方法是最初在该字段中注册所有可能的元素。即从数据库中获取所有职业数据,然后在文档准备好和活动状态改变时使用ajax重新创建或限制字段内容。

'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('prof')->orderBy('prof.name', 'ASC');
}

我想这不是一个很好的解决方案,但它确实有效。 :)

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2014-09-02
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多