Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony表单中访问对象属性_Php_Symfony_Twig_Symfony4 - Fatal编程技术网

Php 在Symfony表单中访问对象属性

Php 在Symfony表单中访问对象属性,php,symfony,twig,symfony4,Php,Symfony,Twig,Symfony4,我试图显示一个带有复选框的课程列表,允许用户从列表中选择任意数量的课程。我是Symfony的新手,尝试使用表单方法,但除了使用choice_标签外,不了解如何显示对象的其他属性 如果我只是通过课程对象,我可以简单地使用: 模板: <form> {% for course in courses %} <div class="row"> <div><input type="checkbox" name="cou

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

如果我只是通过课程对象,我可以简单地使用:

模板:

<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 builder,我的模板看起来如下所示:

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

如何访问表单行中的这些附加对象属性名称、描述等?在这种情况下,是否有理由使用表单生成器而不是第一种“手动”方法?总之,我需要对给定表单行中的对象属性进行粒度控制,仅使用choice_label属性似乎是不够的。什么是潜在的解决方案?

首先,对于访问选项标签的每个选项,它相当简单。。。因为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) }}
注意:标签是传递给Form Builder中«choices»选项的数组中的键值

资料来源:


如何自定义表单呈现:

谢谢您的回复。我已经阅读了该文档并理解了标签的用法。但是,问题是我想显示5个左右与对象相关的属性,例如名称、描述、学期等,而不仅仅是一个标签。据我所知,表单组件似乎不能接受自定义属性?据我所知,您不能。你必须把所有的东西都放在标签上,或者分别对待每个复选框。它只接受小部件范围的帮助。您还可以使用多个复选框类型+multiple=false,而不是使用ChoiceType+multiple=true。我不知道我是否足够清楚。