更新已弃用的代码,我有以下渲染标记问题
> {% render url('_internal_main_navigation', {}) %}
转换为
{{ render(controller('MyBundle::menu', {})) }}
Twig做了这个事情,它将“Controller”和“Action”附加到指定的路由,所以那应该调用MyBundle/Controller/Controller->menuAction()
但显然Controller类应该有某种类型的前缀,如“MyController”所以这个树枝路由可以指定为'Bundle:My:menu'
否则我得到
类“MyBundle”noes不存在
我可以在没有控制器前缀的情况下使其正常工作吗?
答案 0 :(得分:1)
我建议使用render_esi()
按名称通过url()
支持路由,以及将来为ESI设置。
使用默认的render()函数(或将渲染器设置为 (内联),Symfony将包含的页面内容合并到主要内容中 在将响应发送给客户端之前。但是如果你使用esi 渲染器(即调用render_esi())以及Symfony是否检测到它 与支持ESI的网关缓存交谈,它会生成ESI 包括标签。但是,如果没有网关缓存,或者如果没有 支持ESI,Symfony将合并其中包含的页面内容 如果您使用了render(),那么它就是主要的那个。
以下语法适用于您的情况:
{{ render_esi(url('_internal_main_navigation', {})) }}
如果您想按控制器名称进行渲染,则可以将您的控制器变为服务,并通过服务名称(即mybundle_controller
)引用它:
{{ render_esi(controller('mybundle_controller:menuAction', {})) }}