Symfony2 - Twig - 如何从Twig模板中呈现另一个Twig模板

19

我有一个xxx.html.twig文件,它显示一个页面。但是当我想用不同的数据刷新页面,并只更新它与新数据,我需要一个选择框和一个提交按钮。

问题是我不知道如何从我的twig中调用控制器中的操作,并传递参数以获取新数据,然后再次使用新参数呈现相同的twig模板。

我该怎么做?


你只能使用新请求来完成这个操作。如果你不想加载整个页面,可以考虑使用Ajax。 - Sgoettschkes
1
你应该在问题中附上代码示例,并指明想要传递什么的位置。 - Vitalii Zurian
@Sgoettschkes,我想用新的数据数组重新加载整个页面,我该怎么做? - Alon
3个回答

41

这里有几种不同的方法:

{{ render(app.request.baseUrl ~ '/helper/test', {"hostid2": hostid } ) }}
或者
{% include 'MyCoreBundle:Helper:test.html.twig' with {"hostid2": hostid } only %}
或者
{% render controller("MyCoreBundle:Helper:test", {'hostid2': hostid}) %}

请简要解释一下 include 结尾处的 only 是什么意思? - Veve
没事了,我在这里找到了一个很好的解释:https://dev59.com/Umkw5IYBdhLWcg3wY5jq - Veve
啊,男人之间的爱情 :) 我发现了一个错误尝试做: {# 任何循环 #} {{ render(app.request.baseUrl ~ '/helper/test', {"hostid2": forloop.var } ) }} {# endfor #}即使不同的值进入渲染的控制器,最终模板中它们也不会改变。我为这个问题苦恼得要把我的白头发都拔光了。 - Martin Fasani
1
请注意:{% render %}现已过时,已被{{ render() }}替换。 - SteeveDroz

33

Symfony 2.1:


Symfony 2.1:
{% render 'YourBundle:YourController:yourAction' with {'var': value} %}

Symfony 2.6+:

{{ render(controller('YourBundle:YourController:yourAction', {'var': value})) }}

当然,也要阅读文档


变量 "select1" 在此处不存在。 - Alon
1
已经过时,应该使用{{ render(controller('SomeBundle:SomeController:someAction', { 'someVariable': someValue })) }}替代。 - SteeveDroz
1
如@Oltarus所建议,render函数需要括号: render(controller(...)) - Emiliano Sangoi

0

我认为这里有一些过时的部分。 为了使最新的Symfony 3.1.10中的include工作,我是这样解决的:

{% extends 'base.html.twig' %}
{% block body %}
    {{ include('AppBundle:Default:inner_content.html.twig') }}
{% endblock %}

注意:在include()中使用括号。那么所有的变量都将从父模板包含进来。如果你想在子模板中限制一些变量,可以使用with ... only(请参阅)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接