У меня есть форма, в которой используется пользовательская не отображаемая субформа.Symfony: выборочная проверка подформы
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('subtype', 'my-subtype');
}
}
Эта подформация состоит из нескольких полей, и мне нужно выполнить дополнительную проверку обоих из них вместе. Ограничение Callback идеально подходит для работы. Однако я не могу найти способ добавления этого ограничения в подчиненную форму в целом.
До сих пор я пытался установить Callback в setDefaultOptions() или установить его с помощью setAttribute() в buildForm(), но обратный вызов не оценивается.
В настоящее время я просто добавить Обратный к одному из полея:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('field1', 'text')
->add(
'field2', 'text',
array(
'constraints' => array(
new Callback(array(
'methods' => array(array($this, 'validateMyType'))
))
)
));
}
public function validateMyType($data, ExecutionContextInterface $context) {
// Validation failed...
$context->addViolationAt('subtype', "mySubtypeViolation");
return;
}
Это, однако, не позволяет мне добавить нарушения на всем подтипе. Что бы я ни использовал в addViolationAt(), это нарушение всегда добавляется в поле, на котором размещается ограничение обратного вызова.
Ok. Это мое плохое. У меня было плохое объявление значений по умолчанию («ограничения» **, ** array (... »). Как мне еще нужно выяснить, как добавить нарушение в свои поля и подчинить его в целом. – Wolfer
Вам нужно использовать Путь свойств ваших нарушений. '$ context-> buildViolation (...) -> atPath ('подтип')' должен делать трюк. – Terenoth