【问题标题】:Can I repeat a Symfony form in a loop with Twig, or do I have to build it manually?我可以使用 Twig 在循环中重复 Symfony 表单,还是必须手动构建它?
【发布时间】:2019-02-18 20:56:37
【问题描述】:

我对 Symfony 和 Twig 完全陌生;就在昨天,我被扔进了一个使用它们的遗留项目。

我有一个由模板循环生成的Orders 列表,每个订单都有一个priority 从1 到5。

我想向每个Order row 添加一个下拉列表Select,它会提交一个更新Orderpriority 的表单并刷新页面。

我的问题是,我可以将 Symfony 的 buildForm 与这个架构结合使用吗?现在我手动构建了以下表单。甚至可以用 Twig 构建一系列相同的表单吗?:

{% for order in orders %}
<form method="post" action="{{ path('change_priority') }}" style="margin: 0; padding: 0;">
    <div class="form-group">
        <select name="priority" style="width: 35px; height: 20px;" onchange="this.form.submit()">
            <option value="1" {% if order.currentBody.priority == 1 %} selected {% endif %}>1&nbsp;&nbsp;- Low</option>
            <option value="2" {% if order.currentBody.priority == 2 %} selected {% endif %}>2&nbsp;&nbsp;- Normal</option>
            <option value="3" {% if order.currentBody.priority == 3 %} selected {% endif %}>3&nbsp;&nbsp;- High</option>
            <option value="4" {% if order.currentBody.priority == 4 %} selected {% endif %}>4&nbsp;&nbsp;- Critical</option>
            <option value="5" {% if order.currentBody.priority == 5 %} selected {% endif %}>5&nbsp;&nbsp;- No Priority</option>
        </select>
        <input name="order_id" value="{{order.serial}}" type="hidden" />
    </div>
</form>
{% endfor %}

这是我所追求的图像。更改任何 Order 行项目的优先级会更改 Order 的优先级,然后刷新页面。

【问题讨论】:

    标签: symfony symfony-2.1 formbuilder


    【解决方案1】:

    您必须在表单类型中添加它们。 你不能在你的树枝模板中这样做。 如果您使用 {{ form_row(form.select) }} 之类的内容渲染字段,它将被标记为已显示并且不会再次渲染,即使您再次调用 {{ form_row(form.select) }} 也是如此。

    【讨论】:

    • 谢谢;我添加了一些代码来说明我决定如何手动构建表单。我将尝试通过 $username = $request->request->get('_username') 或其他方式手动访问表单数据。如果这听起来是个坏主意,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2022-09-29
    • 2022-07-28
    相关资源
    最近更新 更多