{{form_errors(form.fieldName)}}在symfony2.3中不起作用

时间:2014-01-08 14:36:06

标签: validation symfony symfony-forms

我正在尝试在twig中显示与特定form_field相关的错误消息,但它没有显示任何内容。

我已将validation.yml中与formType字段相关的错误定义为

-\-\Entity\Customer:
    properties:
        address2:
            - NotBlank:
                message: 'Testing required'

当我打印时:

//Controller Class
$validator = $this->get('validator');
$errors = $validator->validate($customer);

//Controller
return $this->render( 'MyBundle:RegistrationPages:register.html.twig', 
    array (
        'errors' => $errors,
        'form'=>$form
    )
);

它显示错误信息:

//Twig
{% if errors is defined %} 
    <h1>The Form has following errors</h1> 
    {% for error in errors %} 
        {{ error.message }} 
    {% endfor %} 
{% endif %}

输出:

  

需要测试

但:

{{ form_errors(form.address2) }}

没有显示任何内容。

3 个答案:

答案 0 :(得分:3)

正如您在验证文件中所看到的,NotBlank属性上定义了address2约束:

properties:
    address2:
        - NotBlank:
             message: 'Testing required'

因此,该表单字段上的所有错误都将在该字段上提供:

{{ form_errors(form.address2) }}

注意:您不必将此类错误传递给您的模板:

//Get all errors that are attributed to the entity itself
{{ form_errors(form) }}
//Get all errors for the individual field `address2 `
{{ form_errors(form.address2) }}

答案 1 :(得分:2)

简而言之:如果您只是验证对象,而不是表单,则表单中不会出现错误。

如果您执行$errors = $validator->validate($customer);,则验证$customer而不是表单。因此,错误不会附加到表单中,只是返回它们,您必须按照问题的方式将它们发送到模板。

如果您想验证表单并能够访问表单对象中的错误,请使用$form->isValid();(我无法向您展示,因为我没有您的表单代码。)

http://symfony.com/doc/current/book/validation.html#validation-and-forms

答案 2 :(得分:0)

您必须在$ form-&gt; handleRequest($ request)之后呈现视图。这意味着您应该像这样编写代码:

$form->handleRequest($request);
$form_view = $form->createView();

.... ....

return $this->render( 'MyBundle:RegistrationPages:register.html.twig', 
    array (
        'errors' => $errors,
        'form'=>$form_view
    )
);