【问题标题】:Symfony - Access form name by referenceSymfony - 通过引用访问表单名称
【发布时间】:2020-11-18 07:07:02
【问题描述】:

我有一个包含许多问题的表格。它们与实体无关,因此在表单类型类中动态生成

class QuestionnaireType extends AbstractType
{
    private $questions = [
        0 => 'Question 1',
        1 => 'Question 2',
        2 => 'Question 3',
    ];

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        foreach ($this->questions as $key => $val) {
            $builder->add($key, ChoiceType::class, [
                'choices' => [
                    1 => 'Yes',
                    2 => 'No',
                ]
            ]);
        }
    }
}

我想循环访问我的树枝模板中的这些表单元素。我尝试了以下方法,但它不起作用:

{% block content %}
    {{ form_start(form) }}
    {{ form_errors(form) }}
    {% for i in 0..2 %}
        {{ form_label(form.i) }}
        {{ form_widget(form.i) }}
    {% endfor %}
    {{ form_end(form) }}
{% endblock %}

是否可以从树枝模板中通过引用访问表单元素?

【问题讨论】:

    标签: symfony twig symfony-forms


    【解决方案1】:

    form.i 不起作用,因为您没有名为 i 的表单字段,并且当通过 foo.bar 访问数组或对象属性时,Twig 不会尝试将 bar 解释为变量。

    也就是说,您还可以通过语法foo[bar] 访问数组键和对象属性,其中bar 将始终 被解释为变量,而foo['bar'] 将是等价的到foo.bar.
    所以在你的情况下,form[i]

    所以这应该适用于您的情况:

    {% block content %}
        {{ form_start(form) }}
        {{ form_errors(form) }}
        {% for i in 0..2 %}
            {{ form_label(form[i]) }}
            {{ form_widget(form[i]) }}
        {% endfor %}
        {{ form_end(form) }}
    {% endblock %}
    

    另一种解决方案是使用attribute 函数:

    {% block content %}
        {{ form_start(form) }}
        {{ form_errors(form) }}
        {% for i in 0..2 %}
            {{ form_label(attribute(form, i)) }}
            {{ form_widget(attribute(form, i)) }}
        {% endfor %}
        {{ form_end(form) }}
    {% endblock %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多