在Symfony表单中访问对象属性

时间:2019-07-03 18:38:53

标签: php symfony twig symfony4

我正在尝试显示一个带有复选框的课程列表,允许用户从列表中选择任意数量的课程。我是Symfony的新手,正在尝试采用表单方法,但是不了解如何使用choice_label来显示对象的其他属性。

如果我只是传递课程对象,则可以简单地使用:

模板:

<form>
    {% for course in courses %}
        <div class="row">
            <div><input type="checkbox" name="course[]" value="{{ course.id }}"></div>
            <div>{{ course.name }}</div>
            <div>{{ course.description }}</div>
            <div>{{ course.semester }}</div>
        </div>
    {% endfor %}
</form>

使用表单生成器,看来我的模板看起来像这样:

{{ form_start(form) }}
        <div class="row">
            <div>{{ form_row(form.courses) }}</div>
        </div>
{{ form_end(form) }}

如何在表单行中访问这些其他对象属性(名称,描述等)?在这种情况下,是否有理由使用表单构建器而不是第一种“手工”方法?总之,我需要对给定表单行内的对象属性进行精细控制,仅choice_label属性似乎还不够。什么是潜在的解决方案?

1 个答案:

答案 0 :(得分:1)

首先,对于访问选择标签的每个选项,这非常简单...因为 form.courses是一个数组。 您可以通过执行以下操作来访问各个复选框:

{{ form_widget(form.courses[0]) }}

您可以使用循环来单独访问它们。为了自定义表单的呈现方式,您可以使用 form_errors form_label form_help 函数,因此最终代码将如下所示:

{{ form_start(form) }}
    {{ form_errors(form) }}
    {% for course in form.courses %}
        <div class="row">
            {{ form_widget(course) }}
            {{ form_label(course) }}
        </div>
    {% endfor %}
    {{ form_help(form.courses) }}
{{ form_end(form) }}

注意:标签是数组中传递给“表单构建器”中“选项”选项的键值。

来源:

如何自定义表单呈现:https://symfony.com/doc/current/form/form_customization.html