Порядок проверки полей формы
Здесь сущность связана с формой.
validation.yml
My\Bundle\Entity\User:
properties:
login:
- NotBlank:
message: "Login is empty."
- Length:
min: 3
max: 16
- My\Bundle\Validator\Constraints\Alphanumeric: ~
и вот одно поле не связано
RegisterType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('login', 'text', array('label' => 'Login'));
...
$builder->add('captcha', 'captcha', array(
'label' => 'Captcha',
'mapped' => false,
'constraints' => array(new ContainsCaptcha)
));
}
проверить на ошибки
MyController.php
$formFields = $form->all();
foreach ($formFields as $key => $field) {
if ($field->getErrorsAsString()) {
$errors = $field->getErrors();
foreach ($errors as $error) {
$messages[$key][] = $error->getMessage();
}
}
}
var_dump($messages);
Капча не подтверждена как другие. Это может иметь ошибку, и только одно из других полей может иметь ошибку.
Я думаю, что было бы правильно иметь две альтернативы:
1 / получить ошибки для всех недопустимых полей одновременно (логин, электронная почта, ..., капча)
2 / не проверять капчу, если логин или другое уже не удалось
Как это сделать?
Более того, логин всегда проверяется первым. Изменение порядка объявлений в validation.yml или buildForm() ничего не меняет. Я предполагаю, что это зависит от порядка объявления Entity.orm.yml. Как изменить этот порядок без изменения метаданных объекта.
2 ответа
Я изменил некоторые проверки, возможно, это что-то исправило, но, скорее всего, поиск ошибок был ошибочным. Исправлено здесь - повторный тип Symfony2 не проверяется
Ты можешь попробовать:
$user = new User();
$validator = $this->get('validator');
$errors = $validator->validate($user);
if (count($errors) > 0) {
return new Response(print_r($errors, true));
} else {
return new Response('The author is valid! Yes!');
}