在树枝模板中重写小部件时直接访问表单字段的值

我想要做的是获取variables存储在窗体视图。

{% form_theme edit_form _self %} {% block field_widget %} {% spaceless %} {% set type = type|default('text') %} <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/> {# MY CODE #} {% if type == "file" %} <a class="BOpreview" href="{# NEED TO REPLACE VAR HERE #}">Aperçu</a> {% endif %} {# MY ATTEMPT #} {{ form.title.get('value') }} {{ form.vars.value.url }} {% endspaceless %} {% endblock field_widget %} 

我的表单有像url,标题等属性,我试图访问它们在这里使用它在字段控件块。

我search了它,并从https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E提出:

 {{ form.title.get('value') }} {{ form.vars.value.url }} 

这对我不起作用。

注意:如果我在我的控制器的$ form-> createView()上做了一个var_dump,我得到:

  object(Symfony\Component\Form\FormView)[331] private 'vars' => array (size=15) 'value' => object(Panasonic\TestEtAvisBundle\Entity\Product)[168] protected 'reviewArray' => object(Doctrine\ORM\PersistentCollection)[234] ... protected 'testArray' => object(Doctrine\ORM\PersistentCollection)[221] ... protected 'fbshareArray' => object(Doctrine\ORM\PersistentCollection)[317] ... private 'id' => int 2 private 'name' => string 'Nom du produit' (length=14) private 'title' => string '<span>Titre </span>' (length=19) private 'image' => string 'bundles/testetavis/uploads/product/0d9d9550.png' (length=47) private 'fbImage' => string 'bundles/testetavis/uploads/product/facebook//product_e928cd96.jpg' (length=65) private 'description' => string '<span>Descriptif </span>' (length=24) private 'url' => string 'http://www.google.com' (length=21) private 'creationDate' => object(DateTime)[210] ... private 'modificationDate' => object(DateTime)[209] ... private 'isDeleted' => int 0 'attr' => array (size=0) empty 'form' => &object(Symfony\Component\Form\FormView)[331] 'id' => string 'panasonic_testetavisbundle_producttype' (length=38) 'name' => string 'panasonic_testetavisbundle_producttype' (length=38) 'full_name' => string 'panasonic_testetavisbundle_producttype' (length=38) 

我想访问该url,但似乎无法做到这一点后,许多变化。 包括使用{{value}},{{value.url}}但是,尽pipe有变数,我可以使用{{full_name}}并获得panasonic_testetavisbundle_producttype。

有任何想法吗?

编辑2:我发现真正的问题…

编辑3:看到这个问题很受欢迎,我决定澄清一下,如果在相同的情况下帮助某人,我试图做些什么。 如果你严格依赖问题所提出的问题,正如我从研究中所表明的那样,而且Besnik支持的确是正确的。 现在我想要做的是对于每个inputtypes文件,从用于呈现表单的对象中获取url,并在inputtypes文件旁边使用检索到的url附加预览链接。 如果你尝试在我的代码中获得inputtypes“file”的formsvar,像这个“{{form.vars.value.url}}”,这是行不通的,因为如果我记得正确的话,你会收到一个令牌而不是存储在对象内部的url。

您可以通过form.vars.value访问您的表单的当前数据:

 {{ form.vars.value.title }} 

请参阅Symfony2 Forms文档: http ://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a- template

通过使用dumpfunction转储variables:

 {{ dump(form.vars.value) }} 

如果您正在使用子窗体或想要具有特定字段的值:

 {{ form.FIELD.vars.VALUE }} 

你可以使用form.parent.vars从一个小部件块访问父父项的值

例如,我们想从一个名为primerNombre的types文本字段中渲染值,我们将需要这个值

 {{ form.vars.value.primerNombre }} 

如果我们想渲染一个我们需要的孩子的名字

 {% for hijo in form.hijos %} <td><div align="left">{{ form_widget(hijo.vars.value.primerNombre) }}</div></td> {% endfor %} 

祝你好运!

EDIT2:

最后,我确实在{{value}}中获取了当前行的值:

 {% block field_widget %} {% spaceless %} {% set type = type|default('text') %} <input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ **value** }}" {% endif %}/> {# MY CODE #} {% if type == "file" %} <a class="BOpreview" href="{{ value }}">Aperçu</a> {% endif %} {% endspaceless %} {% endblock field_widget %} 

但在我的情况下,我得到一个令牌,而不是值,因为我使用inputtypes的文件。 这是由于Symfony2中的一个安全措施。