如何从Twig中的Symfony2表单获取Doctrine2实体方法

Dav*_*les 19 php symfony twig

我在Twig模板中,我有一个"表单"变量,代表一个Doctrine2实体表单.

此实体具有映射到表单的属性,但实体还有一些我想从我的Twig模板访问的方法.

我很想做这样的事情:

{{ form.myMethod }}
Run Code Online (Sandbox Code Playgroud)

或者类似这样的事情:

{{ form.getEntity.myMethod }}
Run Code Online (Sandbox Code Playgroud)

但不幸的是它不起作用.

我怎么能达到我的需要呢?

dtu*_*tte 34

要在树枝模板中从FormView访问您的实体,您可以使用以下代码

{{ form.get('value') }}
Run Code Online (Sandbox Code Playgroud)

表单是FormView对象.这将返回您的实体,然后您可以在其上调用任何方法.如果您在表单中嵌入了一组实体或单个实体,则可以以相同的方式访问它

{{ form.someembedform.get('value') }}
Run Code Online (Sandbox Code Playgroud)

要么

{% for obj in form.mycollection %}
  {{ obj.get('value').someMethod }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,我刚刚遇到Symfony 2.3的问题:`{{form.cp.get('id')}}`不起作用,但`{{form.cp.vars.id}}`有效.所以Philipp Rieber的anwser似乎更准确. (2认同)

Phi*_*ber 18

获取底层实体而不是更方便的语法

{{ form.get('value') }}
Run Code Online (Sandbox Code Playgroud)

这是:

{{ form.vars.value }}
Run Code Online (Sandbox Code Playgroud)

然后你可以调用这样的任何实体方法:

{{ form.vars.value.someMethod }}
Run Code Online (Sandbox Code Playgroud)

另请参阅Symfony2文档中的表单章节:

http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template


jav*_*gzz 15

只是为了更新主题:

form.get('value')
Run Code Online (Sandbox Code Playgroud)

自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) ....
Run Code Online (Sandbox Code Playgroud)

所以,我想

form.vars.value.youMethod()
Run Code Online (Sandbox Code Playgroud)

应该是要走的路.它起作用了我.

......在那里,我的第一篇文章就在这里.希望能帮助到你!


Ant*_*lqk 5

花了几个小时试图弄清楚发生了什么以及为什么

{{ form.vars.value }}
Run Code Online (Sandbox Code Playgroud)

一片空白.

如果你有form.element(不是表单对象本身)对象,例如,如果你覆盖已经传递form.row对象的form_row模板,你可以得到这样的实体:

{{ form.getParent().vars.value.MyEntityMethod }}
Run Code Online (Sandbox Code Playgroud)

希望有人帮助!

编辑:年份等等 - 另一个有用的提示:

{% block sonata_type_collection_widget %}
    {% for child in form %}
        {{ child.vars.form.vars.value.name }}
    {% endfor %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)