Symfony2用树枝形成隐藏字段

时间:2014-07-31 16:26:08

标签: forms symfony twig

我们已经设置了一个表单/视图来创建一个有效的实体,但我们正在尝试向页面添加第二个表单/视图(以更新创建的值),隐藏相关实体的字段。如果我们使用隐藏字段提交表单,则该字段被解释为空,而实际上我们只是想跳过填写/使用之前值的需要。

{{ 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)运行时剥离值的位置,但我们找不到一种方法来确保保持关系而不显示字段。

2 个答案:

答案 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) }}