我有一个可以激活或不激活的用户列表。未呈现的Symfony2表单域阻碍表单验证
对于所有用户,我使用用户可以拥有的角色创建选择字段。
在渲染过程中,我仅渲染活动用户的字段。
一旦形式显示结束我使用
{{form_end(形式,{ 'render_rest':假})}}
,以避免要呈现的不必要的字段。那些不受重视的领域妨碍了表格的验证。 我试图创建一个隐藏的选择字段,但失败。
下面是相关代码:
$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}) }}
这是想什么,我有(即只显示相关字段通知):
如果另一方面如果我使用:
{{form_end(形式)}}
然后代码的工作,但我看到显示unnnecessary字段:
我还试图使所需要的不必要的字段作为无,但问题依然存在。
有什么想法?
我设法通过为每个不必要的字段声明“{%do form ['roleOf_'〜key] .setRendered%}”来解决它。它的作用像一个魅力,但......这是正确的方式吗? –
如果你的表单在你设置'roleOfX'字段被渲染时仍然有效,那么它们就不会成为问题。我会冒险猜测,实际的问题在于你没有呈现csrf标记(请参阅http://symfony.com/doc/current/book/forms.html#csrf-protection),它将呈现在捕获所有'form_rest()/ form_end(form)'或直接使用'form_row(form._token)'(如果使用'_token'的默认字段名称)。 – qooplmao
@SergioNegri我不知道为什么你添加一个字段到FormType,然后改变状态来呈现所有这一切的重点?如果你不希望它在表单中,则不要将它添加到FormType中。 – trrrrrrm