编辑:已解决
我正在尝试构建一个作为服务运行的自定义验证器(主要用于获取实体管理器)。
我关注了doc和一些博客文章,但无法使其正常运行。 我没有得到任何错误消息,但是我的约束中的方法isValid永远不会被调用。
我的实体类(必须通过“UniqueLem”验证(请注意Doctrine验证器有效):
namespace Elyotech\VersionManagerBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Me\AdminBundle\Validator\UniqueLem;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity(repositoryClass="Me\VersionManagerBundle\Repository\ProjectRepository")
* @ORM\Table(name="project")
* @UniqueLem
* @UniqueEntity("name")
*/
class Project{...
我的约束类: 命名空间Elyotech \ AdminBundle \ Validator;
使用Symfony \ Component \ Validator \ Constraint;
/*
* @Annotation
* */
class UniqueLem extends Constraint
{
public $message = 'This value is already used';
public $entity;
public $property;
public function validatedBy()
{
die; // Test to check if function is called
return 'validator.unique';
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
验证
namespace Elyotech\AdminBundle\Validator;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class UniqueValidator extends ConstraintValidator
{
private $entityManager;
public function __construct( $entityManager)
{
$this->entityManager = $entityManager;
}
public function isValid($value, Constraint $constraint) {
$this->setMessage($constraint->message);
return false;
}
服务声明:
my.validator.unique:
class: %my.validator.unique.class%
arguments: [@doctrine.orm.entity_manager]
tags:
- { name: validator.constraint_validator, alias: validator.unique }
所以问题似乎不是来自服务,因为我从未到达UniqueLem / isValid()函数中的“die”。
谢谢!