2016-11-17 3 views
1

Я пытаюсь настроить проверку подлинности на пролив в одном из моих сущностей, проверка прохода требует проверки данных для проверки и проверки поля.Custom Constraint Validation как служба для объекта

Я следил за этой ссылкой: https://symfony.com/doc/2.8/validation/custom_constraint.html, но он не говорит, как установить проверку доступа к моей сущности с помощью YAML.

Установка проверки на прорыв как класс, symfony вызывает ошибку, говоря, что этому классу необходимо передать экземпляр EntityManager.

Вот мой валидатор:

namespace Acme\BundleibBundle\Validator\Constraints; 

use Doctrine\ORM\EntityManager; 
use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class IsNotDayOff extends ConstraintValidator 
{ 
    private $em; 

    public $message = 'Impossible the send this day.'; 

    public function __construct(EntityManager $entityManager) 
    { 
     $this->em = $entityManager; 
    } 

    public function validate($value, Constraint $constraint) 
    { 
     $repository = $em->getRepository('AcmeRibBundle:DayOff'); 

     $isDayOff = $repository->findOneByDate($value); 

     if ($isDayOff) { 
      $this->context->buildViolation($constraint->message) 
       ->addViolation(); 

     } 
    } 
} 

А вот моя служба конфигурации:

validator.is_not_day_off: 
    class: Acme\Bundle\RibBundle\Validator\Constraints\IsNotDayOff 
    attributes: 
     - "@doctrine.orm.entity_manager" 
    tags: 
     - { name: validator.constraint_validator, alias: "validator.is_not_day_off" } 

Я также попробовать это:

validation.yml 
Acme\Bundle\RibBundle\Entity\Address: 
     properties: 
      deliveryDate: 
       - validator.is_not_day_off: ~ 

Но броски и Exception тоже.

Некоторые справочные данные?

+0

Просто замените «атрибуты» на «аргументы» в вашей конфигурации службы. – Timurib

+1

Да, это была ошибка, но ошибка сохраняется –

+0

Что такое метод validateBy() возврата ограничения? И какую версию Symfony вы используете? – Timurib

ответ

2

Кажется, у вас есть только валидатор, и вы пытаетесь применить его как ограничение для вашего имущества.

Вы должны иметь в distincts класс:

ваше ограничение, которое появляется в validation.yml

class IsNotDayOff extends Constraint 
{ 
    public $message = 'your error message'; 

    public function validatedBy() 
    { 
     //return your validator class 
    } 
} 

ваш валидатор вы должны объявить в качестве службы в services.yml

class IsNotDayOffValidator extends ConstraintValidator 
{ 
    //your own logic... 
} 
+0

Вы правы! Я сделал это вчера и отлично работает. Благодаря! –