覆盖Symfony2验证的默认行为(使用QueryBuilder)

时间:2012-09-04 07:58:44

标签: php validation symfony symfony-2.1

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

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

可以将数据添加到Symfony通过Ajax生成的“select”中(新的“profs”不活动(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');
    },
));

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

我猜这不是一个非常好的解决方案,但它只是有效。 :)