Php trait上的Symfony2回调验证

Php trait上的Symfony2回调验证,php,validation,symfony,traits,Php,Validation,Symfony,Traits,我想对特征使用回调验证。例如: 我有同样的问题。通过谷歌找到这个。。。所以:我重现了这个问题。这里也一样 额外信息:如果您在trait中的属性上放置@Assert注释,它将起作用。只有回调不起作用。如果注释在trait上(而不是在方法上,这在Symfony2.4+中是可能的),回调验证器不能与trait中的注释一起使用 如果您的Symfony2版本早于2.4,则必须使用此方法: namespace Vendor\Bundle\Entity; use Doctrine\ORM\Mapping a

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


我有同样的问题。通过谷歌找到这个。。。所以:我重现了这个问题。这里也一样


额外信息:如果您在trait中的属性上放置@Assert注释,它将起作用。只有回调不起作用。

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

如果您的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);

        //...

    }

    //...

}
这只是处理验证器的普通php方法,而不使用XML或YML中的注释或配置文件

我在谷歌查询“
github-symfony-entity-trait-assert-callback
”中找到了这个答案,当时我正在处理相同的问题。对我来说,第一个结果是。

那么,Symfony 2.4+的正确(最简单)方法是什么?