将变量传递给树枝中的父窗体

时间:2015-03-03 11:57:02

标签: forms symfony twig

我需要将变量传递给树枝中的父窗体:

{# This block is called for the children and the parent #}
{% block form_rows %}
    {% for child in form %}
        {% if child.vars.foo == 'bar' %}
            {% set form.vars = form.vars|merge({'key': 'value'}) %}
        {% endif %}

        {# Parent check children key var #}
        {% if child.vars.key %}
            {# do something #}
        {% endif %}

        {# Will call children form_rows block recursively #}
        {{ form_row(child) }}
    {% endfor %}
{% endblock form_rows %}

这当然不起作用,因为你不能设置这样的变量,form是一个对象而不是一个数组。 直到现在我找不到任何解决方案。

1 个答案:

答案 0 :(得分:1)

好的,整个事情都是个坏主意,但是自从Twig v1.2使用attribute函数以来它应该是可能的。为此,您需要在表单对象中使用setter方法,例如:

class YourFormClass {
  public $vars;

  /* your class code comes here */

  public function setVars($newVars) {
    $this->vars = $newVars;
  }
}

假设twig form变量是YourFormClass的一个实例,您现在可以像这样使用attribute函数:

{% set newVal = form.vars|merge({'key': 'value'}) %}
{{ attribute(form, 'setVars', [newVal]) }}
{{ dump(form.vars) }}