2011-11-18 55 views

回答

2

一個解決方案,我可以建議你是做第二,明確的,驗證你的對象並向你的模板發送錯誤。這樣,第一個隱含的驗證在表單對象內完成,並且錯誤被綁定到字段(不使用錯誤冒泡)。第二個驗證會給你一個錯誤的迭代器,你可以將這個迭代器傳遞給你的模板以顯示在窗體的頂部。然後,您將在每個字段旁邊以及表單頂部留下錯誤。

我建議你根據StackOverflow上的this問題。檢查this特別的答案。

下面的代碼爲控制器的草圖(我沒有測試任何東西):

// Code in a controller 
public acmeFormAction(...) { 
    // Form and object code 

    // Get a ConstraintViolationList 
    $errors = $this->get('validator')->validate($user); 

    return $this->render('AcmeTaskBundle:Default:new.html.twig', array(
     'form' => $form->createView(), 
     'errors' => errors, 
    )); 
} 

和代碼模板:

{# Code in a twig template #} 
<ul id="error-list"> 
    {% for error in errors %} 
     <li> error.message </li> 
    {% endfor %} 
</ul> 

{# Display your form as usual #} 

如果沒記錯的話,還有一個辦法從窗體中檢索所有錯誤,並仍然在每個字段上設置錯誤。從我的記憶來看,它是表格視圖中的一個特殊屬性,如form.errors。但我不記得或找到關於此的任何信息。所以,現在,這是我能找到的最好的方法。

+0

如果我們從全局的角度來看,明確的驗證聽起來不太好。假設我們的應用程序中有50個窗體。是的。 看看我的答案。 –

0

你應該做的是使用形式誤差,這可已經考慮到這裏乏像描述:

https://stackoverflow.com/a/13047952/1041895

請看看註釋:

使用vars.errors在新版本上或只是轉儲表單字段以查看屬性。 因爲這部分取決於Symfony版本。

相關問題