簡體   English   中英

如何從Twig中的Symfony2表單獲取Doctrine2實體方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM