在Twig模板中嵌入服务

4

我正在使用控制器作为服务,并尝试使用以下语法将这些控制器嵌入到Twig模板中:

{% render 'my_controller:thisAction' %}
{% render 'my_controller2:this2Action' %}
{% render 'my_controller3:this3Action' %}

问题在于,模板没有被正确地解析,只有第一个渲染语句能够成功渲染模板,后续的则无法正常渲染。

有什么建议可以解决这个问题吗?


1
当您删除第一个时会发生什么?接下来的一个会被渲染吗? - JamesHalsall
此外,请检查您的服务是否在 DI 组件中正确启用。运行 php app/console container:debug 并检查所有服务 ID 是否存在。 - Matt
@Jaitsu 是的,问题在于第二次调用的模板是 this2Action..twig,但找不到它。我通过显式地给出模板服务并使用 $this->templating->renderResponse 方法来解决了这个问题。 - satin
1个回答

0

请确保遵守命名规范。您不需要将控制器设置为服务。控制器的作用是获取一个请求(Request)并返回一个响应(Response)

想象一下,您有一个名为Default的控制器。

namespace Renoir\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller
{

    // ...

    public function randomNameRenderAction()
    {
       // Do some logic
    }

}

在视图中,您可以通过使用以下方式进行调用:
{% render 'RenoirSiteBundle:Default:randomNameRender' %}

你是正确的 @renoirb,但我们正在使用控制器作为服务。只是为了减少重新实例化的负载 :) - satin
嗯,即使控制器是用于请求/响应的,如果您需要执行逻辑操作,我建议使用管理器或处理程序。我仍然不完全理解您的问题,因为在我的看来,您的控制器逻辑名称与模板之间存在错误。您能否调整并更具体地说明您真正的问题呢 :) - renoirb

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