1

ユーザーを登録するための非常に基本的なフォーム(ユーザー名+パスワード)を設定しました。コントローラで検証エラーを取得したいのですが。

私はそれを行う2つの方法を見つけました:

// In my controller:
$user = new User();
$form = $this->createForm(new UserType, $user);

$request = $this->get('request');

if($request->getMethod() == 'POST') {
     $form->bind($request);

     if($form->isValid()) {
         // save user in DB
     } else {
         // First way
         $errors = $this->get('validator')->validate($user);

         // OR
         $errors = $form->getErrors();
     }
 }

たとえば、フォームに短すぎるユーザー名を入力した場合、両方の方法が機能します(このフィールドには制約MinLengthがあります)。しかし、2つの異なるパスワードを入力すると、フォームは無効になり、$ form-> getErrors()または$ this-> get('validator')-> validate($ user)にメッセージエラーはありません。このエラーメッセージを取得するにはどうすればよいですか?

これが私がフォームを作成する方法です

$builder->add('username', 'text', array(
    'attr' => array(
       'placeholder' => 'Choose an username'
    ),
    'label' => 'Username *',
    'error_bubbling' => true,
));

$builder->add('password', 'repeated', array(
    'type' => 'password',
    'invalid_message' => 'The password fields must match.',
    'required' => true,
    'first_options'  => array(
        'label' => 'Password',
        'attr' => array('placeholder' => 'Enter password')
    ),
    'second_options' => array(
        'label' => 'Repeat Password',
        'attr' => array('placeholder' => 'Retype password')
    ),
    ));
4

2 に答える 2

3

このメッセージをコントローラー内で取得したいのはなぜですか?

'password'とにかく、フィールド タイプに対して getErrors() を呼び出す必要があります。'The password fields must match.'これにより、エラーが発生するはずです。

$passwordErrors = $form->get('password')->getErrors();

foreach ($passwordErrors as $key => $error) {
      $message .= $error->getMessageTemplate(). '<br/>';
}

error_bubblingオプションは、特定のフィールドのエラーを親フィールドまたはフォームに渡すために使用されます。あなたの例error_bubblingでは、 に対して true に設定されているためusername、親要素 (ここでは $form) で getErrors() を呼び出すことにより、ユーザー名フィールドの検証エラー メッセージを取得できます。error_bubblingこの特定のフィールドでもオプションをtrueに設定しない限り、パスワードの繰り返しフィールドには当てはまりません。

于 2012-12-12T17:09:44.437 に答える