これは、フォームにバインドされたエンティティです。
検証.yml
My\Bundle\Entity\User:
properties:
login:
- NotBlank:
message: "Login is empty."
- Length:
min: 3
max: 16
- My\Bundle\Validator\Constraints\Alphanumeric: ~
ここにバインドされていない1つのフィールドがあります
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つの選択肢があるのは正しいと思います:
1/ 同時にすべての無効なフィールドのエラーを取得します (ログイン、電子メール、...、キャプチャ)
2/ ログインまたはその他がすでに失敗している場合はキャプチャを検証しない
どうやってするの?
さらに、ログインは常に最初に検証されます。validation.yml または buildForm() で宣言の順序を変更しても、何も変わりません。Entity.orm.yml の宣言順によると思います。エンティティ メタデータを変更せずにこの順序を変更する方法。