未呈现的Symfony2表单字段阻碍表单验证

时间:2014-12-25 16:15:22

标签: php forms validation symfony hidden-field

我有一个可以激活的用户列表。

对于所有用户,我使用用户可以拥有的角色创建一个选择字段。

在渲染过程中,我只渲染活动用户的字段。

表单显示完成后,我使用

  

{{form_end(form,{' render_rest':false})}}

避免渲染不必要的字段。那些未提取的字段阻碍了表单的验证。 我试图创建一个隐藏的选择字段,但失败了。

以下是相关代码:

$form = $this->createFormBuilder()->getForm(); //create empty form
foreach ($HRsInThisProject as $key => $HR)
    {
        $form->add('roleOf_'.$key, 'choice', array('choices'   => $rolesListForForm,'required'  => true,'data' => $HR['role'], 'label' => false, ));
    }
$form->add('save', 'submit', array('label' => 'Save')); 

在我的树枝上,我有:

<table>
<tr>
    <td>User ID</td>
    <td>Name</td>
    <td>Role</td>
    <td>Started</td>
</tr>

{% for key, HR in HRs %}
    {% if HR.is_active %}
    <tr>
        <td>{{ key }}</td>
        <td>{{ HR.name }}</td>
        <td>{{ form_row(form['roleOf_' ~ key]) }}</td>
        <td>{{ HR.started_at|date('Y-m-d H:i:s') }}</td>
    </tr>
    {% endif %}
{% endfor %}
</table>
<br>
{{ form_row(form.save) }}
{{ form_end(form, {'render_rest': false}) }}

这就是我想要的(注意只显示相关字段): enter image description here

另一方面,如果我使用:

  

{{form_end(form)}}

然后代码可以工作,但我看到显示了不必要的字段:

enter image description here

我还尝试将不必要的字段设为非必需字段,但问题仍然存在。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

要避免呈现该字段,您必须将其从FormType中删除,并为实体中的该字段指定默认值

Class User {

     protected $unnecessary = "Some Value";

}

或者您可以使用FormEvents为该属性分配默认值

http://symfony.com/doc/current/components/form/form_events.html

或者您可以将该字段呈现为隐藏

http://symfony.com/doc/current/reference/forms/types/hidden.html

最重要的是,一旦您向FormType添加了一个属性,该字段将被确保呈现。

答案 1 :(得分:0)

NULL

如果未呈现表单的字段,则其值将以<input type='text' pattern='^(((\d|1[0-1])?(0|5)|120)|)$' /> 的形式发送。 因此,如果您已为此字段设置了值,则该字段将无效。