![](/img/trans.png)
[英]Symfony2 and Doctrine2 : populate form with two Entity (a complicated scenario)
[英]How to get a Doctrine2 Entity method from a Symfony2 Form in Twig
我在Twig模板中,我有一個“表單”變量,代表一個Doctrine2實體表單。
此實體具有映射到表單的屬性,但實體還有一些我想從我的Twig模板訪問的方法。
我很想做這樣的事情:
{{ form.myMethod }}
或者類似這樣的事情:
{{ form.getEntity.myMethod }}
但不幸的是它不起作用。
我怎么能達到我的需要呢?
要在樹枝模板中從FormView訪問您的實體,您可以使用以下代碼
{{ form.get('value') }}
表單是FormView對象。 這將返回您的實體,然后您可以在其上調用任何方法。 如果您在表單中嵌入了一組實體或單個實體,則可以以相同的方式訪問它
{{ form.someembedform.get('value') }}
要么
{% for obj in form.mycollection %}
{{ obj.get('value').someMethod }}
{% endif %}
獲取底層實體而不是更方便的語法
{{ form.get('value') }}
這是:
{{ form.vars.value }}
然后你可以調用這樣的任何實體方法:
{{ form.vars.value.someMethod }}
另請參閱Symfony2文檔中的表單章節:
http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template
只是為了更新主題:
form.get('value')
自symfony 2.1以來已棄用。 從Symfony \\ Component \\ Form \\ FormView復制:
/*
* @deprecated Deprecated since version 2.1, to be removed in 2.3. Access
* the public property {@link vars} instead.
*/
public function get($name, $default = null) ....
所以,我想
form.vars.value.youMethod()
應該是要走的路。 它起作用了我。
......在那里,我的第一篇文章就在這里。 希望能幫助到你!
花了幾個小時試圖弄清楚發生了什么以及為什么
{{ form.vars.value }}
一片空白。
如果你有form.element(不是表單對象本身)對象,例如,如果你覆蓋已經傳遞form.row對象的form_row模板,你可以得到這樣的實體:
{{ form.getParent().vars.value.MyEntityMethod }}
希望有人幫助!
編輯:年份等等 - 另一個有用的提示:
{% block sonata_type_collection_widget %}
{% for child in form %}
{{ child.vars.form.vars.value.name }}
{% endfor %}
{% endblock %}
對象方法應該在twig中工作,我知道我在一些項目中使用它們。
嘗試使用()
像{{ form.myMethod() }}
似乎在某些時候該值實際上是空的 。 所以你可以使用
{{ (form.vars.value != null) ? form.vars.value.yourEntityMethod():'' }}
在SF v3.0.6中測試。
以上都不適用於2.6.7版本 。 我使用自定義的窗體小部件來實現這個目的:
{# src/AppBundle/Resources/views/Form/fields.html.twig #}
{% extends 'form_div_layout.html.twig' %}
{%- block entity_widget -%}
<div {{ block('widget_container_attributes') }}>
{%- for n, child in form %}
{{- form_widget(child, {
'entity': form.vars.choices[n].data
}) -}}
{{- form_label(child) -}}
{% endfor -%}
</div>
{%- endblock %-}
{%- block radio_widget -%}
{# You now have access to entity #}
{%- endblock %-}
使用{{ form.getData.myMethod }}
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.