0

これは、フォームにバインドされたエンティティです。

検証.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 の宣言順によると思います。エンティティ メタデータを変更せずにこの順序を変更する方法。

4

2 に答える 2

0

いくつかの検証を変更しました。おそらく何かが修正されましたが、間違いなくエラーの取得に欠陥がありました。ここで修正しました-Symfony2の繰り返し型が検証されません

于 2013-07-30T13:37:37.080 に答える
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 に答える