Порядок проверки полей формы

Здесь сущность связана с формой.

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!');
}
Другие вопросы по тегам