【问题标题】:embedding services in twig templates在树枝模板中嵌入服务
【发布时间】:2011-11-25 09:07:25
【问题描述】:

我将控制器用作服务并尝试使用以下语法将这些控制器嵌入到树枝模板中:

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

问题在于,只有第一个渲染语句能够渲染模板,而不是正确解析,而后面的则不能。

有什么建议为什么会出现这个问题?

【问题讨论】:

  • 删除第一个会发生什么?那么下一个渲染了吗?
  • 另外,检查您的服务是否在 DI 组件中正确启用。运行 php app/console container:debug 并检查您的所有服务 ID 是否都在那里。
  • @Jaitsu 是的,问题是第二次调用的模板是 this2Action..twig 未找到,我通过显式为其提供模板服务然后使用 $this->template- >renderResponse 方法

标签: symfony twig


【解决方案1】:

只要确保遵守命名约定即可。而且你不需要你的控制器成为服务。控制器旨在获取 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,但我们正在使用控制器作为服务。只是为了减少重新实例化的负载:)
  • 嗯。虽然。控制器用于请求/响应,如果您需要执行逻辑,我推荐使用 Manager 或 Handler。我仍然没有完全得到您的问题,因为在我看来,您的 controller logical names 与模板对我来说是错误的。您能否调整一下并更具体地说明您的实际问题:)
猜你喜欢
  • 2013-08-07
  • 2012-07-27
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
相关资源
最近更新 更多