这是绑定到表单的实体。
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声明顺序。如何在不改变实体元数据的情况下更改此订单。
答案 0 :(得分: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!');
}
答案 1 :(得分:0)
我改变了一些验证,也许它修复了一些东西,但大多数肯定错误检索是有缺陷的。 修复了这个问题 - Symfony2 repeated type does not validate