我想在特征上使用回调验证。例如:
<?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);
//...
}
//...
}
但它似乎不起作用。有人知道这是否可能吗?
答案 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注释,它将起作用。只是回调不起作用。