特征上的Symfony2回调验证

时间:2013-05-11 09:45:57

标签: php validation symfony traits

我想在特征上使用回调验证。例如:

<?php
namespace Vendor\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;

/**
 * @Assert\Callback(methods={"validateReview"}, groups={"review"})
 */
trait ReviewableEntity
{
    //...

    /**
     * @param ExecutionContext $context
     */
    public function validateReview(ExecutionContext $context)
    {

        //...

        $context->addViolationAt('review', 'Review must be valid', [], null);

        //...

    }

    //...

}

但它似乎不起作用。有人知道这是否可能吗?

2 个答案:

答案 0 :(得分:1)

如果注释在特征上(而不是在Symfony 2.4+可能的方法上),则回调验证器不能与特征中的注释一起使用。

如果您的Symfony2版本早于2.4,则必须使用此方法:

namespace Vendor\Bundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Mapping\ClassMetadata;

trait ReviewableEntity
{
    //...

    public static function loadValidatorMetadata(ClassMetadata $metadata)
    {
        $metadata->addConstraint(
            new Assert\Callback(
                'validateReview',
                array(
                    'groups' => array('review'),
                )
            )
        );
    }

    /**
     * @param ExecutionContext $context
     */
    public function validateReview(ExecutionContext $context)
    {

        //...

        $context->addViolationAt('review', 'Review must be valid', [], null);

        //...

    }

    //...

}

这只是在不使用XML或YML中的注释或配置文件的情况下处理验证器的常规php方式。

我在这个谷歌查询“github symfony entity trait assert callback”中找到了这个答案,因为我在解决同样的问题。对我来说,第一个结果是this gihtub page containing code that solve the problem

答案 1 :(得分:0)

我有同样的问题。通过谷歌发现这一个......所以:我转载了这个问题。同样在这里。

额外信息:如果在特征内的属性上放置@Assert注释,它将起作用。只是回调不起作用。

相关问题