0

这是绑定到表单的实体。

验证.yml

My\Bundle\Entity\User:
    properties:
        login:
            - NotBlank:
                message: "Login is empty."
            - Length:
                min: 3
                max: 16
            - My\Bundle\Validator\Constraints\Alphanumeric: ~

这是一个未绑定的字段

注册类型.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 声明顺序。如何在不更改实体元数据的情况下更改此订单。

4

2 回答 2

0

你可以试试:

$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!');
}
于 2013-07-30T07:00:04.793 回答
0

我改变了一些验证,也许它修复了一些东西,但最肯定的错误检索是有缺陷的。在这里修复 - Symfony2 重复类型不验证

于 2013-07-30T13:37:37.080 回答