編集:解決済み
サービスとして実行されるカスタム バリデータを構築しようとしています (主にエンティティ マネージャを取得するため)。
ドキュメントといくつかのブログ投稿に従いましたが、機能しません。エラー メッセージは表示されませんが、制約から isValid メソッドが呼び出されることはありません。
My Entity クラス (「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() 関数の「ダイ」に到達しないため、この問題はサービスに起因しているようには見えません。
ありがとう!