我需要将变量传递给树枝中的父窗体:
{# 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
是一个对象而不是一个数组。
直到现在我找不到任何解决方案。
答案 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) }}