我们已经设置了一个表单/视图来创建一个有效的实体,但我们正在尝试向页面添加第二个表单/视图(以更新创建的值),隐藏相关实体的字段。如果我们使用隐藏字段提交表单,则该字段被解释为空,而实际上我们只是想跳过填写/使用之前值的需要。
{{ form_start(form) }}
{% do form.name.setRendered %}
{{ form_widget(form.quantity) }}
{{ form_widget(form.submit) }}
{{ form_end(form) }}
如果我们提交表单,我们的关系将被删除,而不是保留以前的值。
我们还尝试使用{{ form_widget(form.name, { 'attr': {'disabled': 'disabled'} }) }}
禁用该字段,但这虽然禁用了该字段,但仍会返回相同的效果。
在控制器中,我们可以看到$form->handleRequest($entity)
运行时剥离值的位置,但我们找不到一种方法来确保保持关系而不显示字段。
答案 0 :(得分:2)
老问题,但对于任何有兴趣的人,这是解决这个问题的另一种方法。查看Twig Template Form Function and Variable Reference。
我有一系列表格并希望使用Awesome Bootstrap Checkbox。在twig中,我访问每个表单变量并手动创建元素:
{% for form in forms %}
{{ form_start(form, {'attr': {'class': 'list-group-item' }}) }}
<input type="hidden" name="{{ form.title.vars.full_name }}" value="{{ form.title.vars.value }}">
<div class="checkbox checkbox-info checkbox-circle">
<input type="submit" name="submit" value="Update" class="btn btn-success pull-right">
<input type="checkbox" class="styled" id="todo{{ loop.index }}">
<label for="todo{{ loop.index }}">{{ form.title.vars.value }}</label>
</div>
{{ form_widget(form._token) }}
{{ form_end(form, {'render_rest': false }) }}
{% endfor %}
编辑:Twig模板表单函数和变量引用仅适用于Symfony 2.7及更高版本。
答案 1 :(得分:1)
目前,我们最终将字段输出到隐藏的div中,这样我们就可以隐藏输入而无需使用twig函数{% do form.name.setRendered %}
(这会导致非渲染字段设置为null)。
新代码如下所示:
{{ form_start(form) }}
<div class="hidden">
{{ form_widget(form.name) }}
</div>
{{ form_widget(form.quantity) }}
{{ form_widget(form.submit) }}
{{ form_end(form) }}