2015-03-13 84 views
0

我有以下問題。我使用Symfony Forms來驗證JSON請求,這也很棒。但我也會以更多的Json可讀的方式拋出錯誤。Symfony窗​​體錯誤呈現

是否有可能從FormErrorIterator FormError獲取每個錯誤的相關字段名稱。

例如:

formName.SubForm.Propertyname => 'MyErrorMessage' 

路徑的結構可以是也數組。

回答

1

如果你想獲取一個數組的形式的錯誤,你可以添加在你的控制器使用方法:

private function getErrorMessages(\Symfony\Component\Form\Form $form) { 
    $errors = array(); 

    foreach ($form->getErrors() as $key => $error) { 
     if ($form->isRoot()) { 
      $errors['#'][] = $error->getMessage(); 
     } else { 
      $errors[] = $error->getMessage(); 
     } 
    } 

    foreach ($form->all() as $child) { 
     if (!$child->isValid()) { 
      $errors[$child->getName()] = $this->getErrorMessages($child); 
     } 
    } 

    return $errors; 
} 

$錯誤將包含錯誤的數組,如果一個字段有錯誤字段名稱將用作數組中的鍵:

$ errors ['FIELD_NAME'] = ERROR_MSG。

根據您的Symfony版本,您可能需要或想要此方法的其他版本:Symfony2 : How to get form validation errors after binding the request to the form

UPDATE

如果您validation constraints是對實體類的字段,他們將是錯誤的陣列基於字段名的鍵英寸

如果您的驗證約束條件在實體類上,則它將在#鍵或數字鍵中,具體取決於表單是否爲根。

實體類的例子

/** 
* @Assert\Callback("isValidName") <- this error will be in $errors['#'] 
*/ 
class Author 
{ 
    /** 
    * @Assert\NotBlank() <- this error will be in $errors['firstname'] 
    */ 
    public $firstname; 
} 

如果您想對字段僅錯誤,你需要將所有的實體領域的實體類斷言。

+0

這似乎更多的評論。您需要向提問者詢問是否要從參考鏈接中提取更具體(且有用)的答案,以便在此處進行報告。 – 2015-03-13 18:30:12

+0

我已經更新了關於您的評論的答案,它應該更準確。 – HypeR 2015-03-13 19:29:45

+0

幹得好,現在它是一個答案:-)。 – 2015-03-13 19:43:49