2016-05-10 11 views
0

私はいくつかのフォームエラーを取得していますが、私はエラーが何で、フォームが無効であるのかを理解するのに苦労しています。私はSymfony 2.7を使用しています。文字列としてのsymfony 2.7のフォーム検証エラーを取得します

$errors = $form->getErrors(true, true); 

私はしかし、これらは現在<empty>としてを通じて来ている、私たちのロギングアプリケーションに渡すことができるように私は、文字列としてそれらをしたいと思います。

答えて

-1

多分(いくつかの形がネストされているほとんどの場合)、フォームからのエラーを取得するために、問題が発生したとき、私はこれらの2つのカスタムutilsの機能を使用し

$form->getErrorsAsString() 

を試してみてください。

public function getErrorMessagesFromUnbubblingForm(\Symfony\Component\Form\FormInterface $form) 
{ 
    $errors = array(); 
    foreach ($form->getErrors() as $key => $error) { 
     $template = $error->getMessageTemplate(); 
     $parameters = $error->getMessageParameters(); 

     foreach ($parameters as $var => $value) { 
      $template = str_replace($var, $value, $template); 
     } 

     $errors[$key] = $template; 
    } 
    if ($form->count()) { 
     foreach ($form as $child) { 
      if (!$child->isValid()) { 
       $errors[$child->getName()] = $this->getErrorMessagesFromUnbubblingForm($child); 
      } 
     } 
    } 
    return $errors; 
} 

public function getFlatErrorMessagesFromUnbubblingForm(\Symfony\Component\Form\FormInterface $form) 
{ 
    $errors = array(); 
    foreach ($form->getErrors() as $error) { 
     $template = $error->getMessageTemplate(); 
     $parameters = $error->getMessageParameters(); 

     foreach ($parameters as $var => $value) { 
      $template = str_replace($var, $value, $template); 
     } 

     $errors[] = $template; 
    } 
    if ($form->count()) { 
     foreach ($form as $child) { 
      if (!$child->isValid()) { 
       $errors = $this->getFlatErrorMessagesFromUnbubblingForm($child); 
      } 
     } 
    } 
    return $errors; 
} 
+0

ます$ form-> getErrorsAsString()は推奨されませんそれはないですか? – user1961082

+0

、2.5以降では非推奨、3.0では削除されました。 docに従って、getErrors()を代わりに使用し、結果を文字列にキャストします。私の悪い私は2.3を使用しています – VaN

0

この(string)$form->getErrors()を試してみてください、そうでなければ、文字列にキャストしなければ、一見しても意味をなさない恐ろしい長い配列になります。

あなたが発生したエラーの合計数を知りたい場合は、これを使用し、

$form->count($form->getErrors())

関連する問題