我想要做的是将变量存储在表单视图中。
{% 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,title等属性,我试图在这里访问它们以在字段小部件块中使用它。
我搜索了它并且https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E提出了建议:
{{ form.title.get('value') }}
{{ form.vars.value.url }}
这对我不起作用。
注意:如果我在我的控制器中对$ form-&gt; 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)
我想访问该网址,但很多变种之后似乎无法做到这一点。包括使用{{value}},{{value.url}} 但是,尽管有变量,我可以{{full_name}}并获得panasonic_testetavisbundle_producttype。
有什么想法吗?
编辑2:我发现了真正的问题...
编辑3:看到这个问题非常受欢迎,我决定澄清一下我试图做些什么,以防它帮助处于同样情况的人。如果你严格依赖于问题的要求,正如我从研究中所说的那样,Besnik支持的确是正确的。 现在我想要做的是为每个输入类型文件,从用于渲染表单的对象获取url,并使用检索的URL在输入类型文件旁边附加预览链接。 如果您尝试在我的代码中获取类似“{{form.vars.value.url}}”的输入类型“文件”的表单var,则这不起作用,因为如果我没记错,您会收到一个令牌而不是存储在对象内的url。
答案 0 :(得分:109)
您可以通过form.vars.value访问表单的当前数据:
{{ form.vars.value.title }}
请参阅Symfony2 Forms文档:http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template
使用dump
函数转储变量:
{{ dump(form.vars.value) }}
如果您正在使用子表单或想要具有特定字段的值:
{{ form.FIELD.vars.VALUE }}
答案 1 :(得分:4)
您可以使用form.parent.vars
答案 2 :(得分:2)
例如,我们想要从名为primerNombre的类型文本字段中呈现值,我们需要
{{ form.vars.value.primerNombre }}
如果我们想要呈现我们需要的其中一个孩子的名字
{% for hijo in form.hijos %}
<td><div align="left">{{ form_widget(hijo.vars.value.primerNombre) }}</div></td>
{% endfor %}
祝你好运!
答案 3 :(得分:0)
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 %}
但在我的情况下,我得到一个令牌而不是值,因为我使用的是输入类型文件。这是由于Symfony2中的安全措施。
答案 4 :(得分:0)
在Symfony> 3中,您可以使用:
form.vars.value.Entity.someValue