Форма Symfony: проверить детей перед родителемPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Форма Symfony: проверить детей перед родителем

Сообщение Anonymous »

У меня есть код, который более или менее похож на это: < /p>

Код: Выделить всё

class testForm extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('constraints', [new Callback(['callback' => function ($payload, ExecutionContextInterface $context) {
$data = $context->getObject()->getData();

if (strtolower($data['field1']) != strtolower($data['field2'])) {
$context
->buildViolation('fields must be equal')
->atPath('[field1]')
->addViolation();
}
}])]);
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('field1', TextType::class, ['constraints' => [new NotBlank]])
->add('field2', TextType::class, ['constraints' => [new NotBlank]]);
}
}
< /code>
Это не мой фактический код, а просто для того, чтобы показать концепцию того, что я пытаюсь сделать: у меня есть форма, в которой требуется каждое отдельное поле, а затем некоторые проверки запускаются на Значения нескольких полей в комбинации. < /p>
Проблема, которую я столкнулся с этим кодом, заключается в том, что оно будет выбросить уведомление, когда вы отправляете с пустыми полями (null
не разрешен в качестве параметра для strtolower ).
afaict это связано с тем, что валидация родителей выполняется до проверки ребенка, поэтому он проверяет, только если у поля есть значения После выполнения проверки верхнего уровня. Глядя на документацию Symfony, существует действительное ограничение , которое, кажется, делает именно это, но, кажется, работает только с объектами (моя форма не использует объект, но простой DTO). < Br/> Поэтому мне было интересно: есть ли способ сделать действительный работать без сущностей или какого -либо другого ограничения/способа сделать это, который я упустил из виду?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ore-parent
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»