2015-03-03 76 views
0

我需要一個變量傳遞給父窗體在樹枝:傳遞變量到父窗體在樹枝

{# 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

恕我直言,這不應該在模板中執行一種邏輯。 MVC模式告訴我們在php中做這個東西。 – 2015-03-03 21:06:16

+0

我知道我會有這樣的評論,但這不是我想要的,因爲我相信你是對的。我只想知道是否有辦法做到這一點,以及如何做到這一點。 – Gnucki 2015-03-04 08:41:34

回答

1

好吧,整個事情是一個壞主意,但它應該是可能的,因爲Twig v1.2使用attribute函數。爲此你需要一個setter方法在你的表單對象,如:

class YourFormClass { 
    public $vars; 

    /* your class code comes here */ 

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

假設樹枝form變量是YourFormClass一個實例,你現在可以使用attribute功能是這樣的:

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

這不適用於我...對象「Symfony \ Component \ Form \ FormView」的方法「setVars」不存在。這是因爲form是'FormView'的一個實例,而不是'YourFormClass'的實例。 – Gnucki 2015-03-06 10:33:21

+0

當然。 '你的表格'只是爲了說明。在你的情況下,'setVars'方法應該是'FormView'的成員,或者如果這是不可能的,你可以擴展這個類。 – 2015-03-06 16:49:09