2017-01-16 2 views
0

Я, я должен добавить Assert к атрибуту, когда другой атрибут равен чем-то. Как это:добавить Symfony Assert в обратном вызове

/** 
* @Assert\Callback(methods={"isChildMinor",) 
*/ 
class PatientData 
{ 
/** 
* @Assert\Date() 
*/ 
public $birthday; 

public $role; 

public function isChildMinor(ExecutionContext $context) 
{ 
    if ($this->role == 3 && check @assert\isMinor() to $birtday) { 
    =>add violation 
    } 
} 

так, я хочу проверить, если пациент несовершеннолетний (с заявления или нечто другое), если роль равно чем 3. Как это сделать?

ответ

2

Существует несколько способов сделать то, что вы хотите.

1) Вы можете сделать это прямо в форме. Как что:

use Symfony\Component\Validator\Constraints as Assert; 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $yourEntity = $builder->getData(); 
    //here you start the field, you want to validate 
    $fieldOptions = [ 
    'label'  => 'Field Name', 
     'required' => true, 
    ]; 
    if ($yourEntity->getYourProperty != 'bla-bla-bla') { 
    $fieldOptions[] = 'constraints' => [ 
     new Assert\NotBlank([ 
      'message' => 'This is unforgivable! Fill the field with "bla-bla-bla" right now!', 
     ]), 
    ], 
    } 
    $builder->add('myField', TextType::class, $fieldOptions); 

2) Другой способ - это сделать свой собственный обратный вызов проверки в вашей организации и играть с прямым утверждает там. Возможно, я думаю.

3) Но оптимальным способом, с моей точки зрения, является использование нескольких утверждений с группами проверки. Вам нужно указать Assert \ isMinor (groups = {"myCustomGroup"}) в поле дня рождения. И затем, в вашей форме:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
    'validation_groups' => function (FormInterface $form) { 
     $yourEntity = $form->getData(); 
     if ($yourEntity->role !== 3) { 
      return ['Default', 'myCustomGroup']; 
     } 
     return ['Default']; 
    }, 

Надеюсь, это будет полезно для вас.

+0

Я попробую это и скажу вам, спасибо. – NicolaPez

+0

Привет, я пытаюсь реализовать это, у меня есть одна проблема: вещи, которые я не понимаю, - это то, как вы получаете подтверждение для возврата как «myCustomGruop». Я указать Assert Малую как это: /** * @Assert \ Date() * @Assert \ GreaterThan ("- 18 лет") */ общественности $ рождения; поэтому я не знаю, как положить в этот возвращаемый массив. – NicolaPez

+0

Я понимаю с этим http://symfony.com/doc/current/components/options_resolver.html и проверкой группы, и теперь все работает нормально. Спасибо за помощь – NicolaPez

Смежные вопросы