在symfony twig中渲染控制器动作

时间:2017-09-25 12:40:50

标签: symfony twig

更新已弃用的代码,我有以下渲染标记问题

> {% render url('_internal_main_navigation', {}) %}

转换为

{{ render(controller('MyBundle::menu', {})) }}

Twig做了这个事情,它将“Controller”和“Action”附加到指定的路由,所以那应该调用MyBundle/Controller/Controller->menuAction()但显然Controller类应该有某种类型的前缀,如“MyController”所以这个树枝路由可以指定为'Bundle:My:menu' 否则我得到

类“MyBundle”noes不存在

我可以在没有控制器前缀的情况下使其正常工作吗?

1 个答案:

答案 0 :(得分:1)

我建议使用render_esi()按名称通过url()支持路由,以及将来为ESI设置。

  

使用默认的render()函数(或将渲染器设置为   (内联),Symfony将包含的页面内容合并到主要内容中   在将响应发送给客户端之前。但是如果你使用esi   渲染器(即调用render_esi())以及Symfony是否检测到它   与支持ESI的网关缓存交谈,它会生成ESI   包括标签。但是,如果没有网关缓存,或者如果没有   支持ESI,Symfony将合并其中包含的页面内容   如果您使用了render(),那么它就是主要的那个。

请参阅Using ESI in Symfony

以下语法适用于您的情况:

{{ render_esi(url('_internal_main_navigation', {})) }}

如果您想按控制器名称进行渲染,则可以将您的控制器变为服务,并通过服务名称(即mybundle_controller)引用它:

{{ render_esi(controller('mybundle_controller:menuAction', {})) }}