2011-11-18 94 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版本。