1

どのエンティティにも関連付けられていない登録フォームがあります。validation_constraintバリデーター(オプション)を指定する方法を見つけました。単純なバリデーターを使用しても大丈夫です。

しかし、「password」フィールドと「repeat password」フィールドを比較するなど、クロスフィールド検証を行いたい場合はどうなりますか?

エンティティの場合は、カスタムメソッドに「@ Assert / True」アノテーションを追加するのと同じくらい簡単ですが、ここではわかりません。ドキュメントやネットで何も見つかりません。

4

1 に答える 1

1

フォームのbuildForm関数では、次を使用できますCallbackValidator

 use Symfony\Component\Form as Form;

 //...

 public function buildForm(FormBuilder $builder, array $options)
 {
    // build your form...
    $builder->addValidator(new Form\CallbackValidator(function(Form\FormInterface $form)
    {
       if ($form["password"]->getData() != $form["repeat_password"]->getData())
       {
            $form->addError(new Form\FormError('passwords must be the same'));
       }
    });
    //...
 }

symfony 2.1+ では、POST_BIND イベントのイベント リスナーを追加する必要があります。

$builder->addEventListener(FormEvents::POST_BIND, function(FormEvent $event)
{
    $form = $event->getForm();

    if($form['password']->getData() !== $form['password_confirm']->getData())
    {
        $form['password_confirm']->addError(new FormError('error.form.passwords-not-match'));
    }
});      
于 2012-06-19T12:32:35.383 に答える