5

編集:解決済み

サービスとして実行されるカスタム バリデータを構築しようとしています (主にエンティティ マネージャを取得するため)。

ドキュメントといくつかのブログ投稿に従いましたが、機能しません。エラー メッセージは表示されませんが、制約から 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() 関数の「ダイ」に到達しないため、この問題はサービスに起因しているようには見えません。

ありがとう!

4

0 に答える 0