2015-11-25 2 views
2

У меня есть метод, подтверждающий правильность комбинации определенных входов (, например, выбранная опция для пожилых людей и день рождения показывают возраст выше n).bind Asserts on methods to property

/** 
* @Assert\True(message="you are too young for this option") 
*/ 
public function isElderlyOptionValid() 
{ 
    return 
    ($this->getElderlyOption() && $this->getAgeFromBirthday() <= 60); 
} 

Теперь я хочу, чтобы ошибка, чтобы показать опции престарелой-скидки, а не в качестве общей погрешности для лица/формы. Так что мне нужно что-то вроде:

/** 
* @Assert\True(message="you are too young for this option", bindTo="elderlyOption") 
*/ 
public function isElderlyOptionValid() 
{ 
    return 
    ($this->getElderlyOption() && $this->getAgeFromBirthday() <= 60); 
} 

Я прочитал один раз, что это возможно, но не может найти статью снова.

+1

И заменив 'bindTo' на' atPath'? –

+0

@JulienBourdic: Это вызывает ошибку «atPath» не вариант :-( –

ответ

1

UniqueEntity имеет error_path и использует atPath внутри UniqueEntityValidator, но я не думаю, что его можно изменить для всех валидаторов.

Вероятно, вы можете продлить этот валидатор и добавить atPath функциональность, но

this is what you're looking for возможно . Формы имеют свойство error_mapping и вы можете перенаправить вашу ошибку в поле.

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'error_mapping' => array(
      'matchingCityAndZipCode' => 'city', 
     ), 
    )); 
}