php - 如何在 symfony2 服务中执行 $this->render()?

标签 php symfony

我在普通的 symfony2 Controller 中有这段代码:

            $temp = $this->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
                'c'=> $content[$i],
                'ordernumber' => 1,
            ));

而且效果很好。

现在我正试图将其移动到服务中,但我不知道如何访问普通 Controller 的 $this 等价物。

我试过像这样注入(inject)容器:

    $systemContainer = $this->container;

    $temp = $systemContainer->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
                'c'=> $content[$i],
                'ordernumber' => 1,
            ));

但这没有用,我想那是因为 render 并没有真正使用普通 Controller 的 $this->container,而是只使用了 $this 部分。

有人知道如何在服务中使用 $this->render() 吗?

最佳答案

检查 Symfony\Bundle\FrameworkBundle\Controller 类中的方法 render。它说:

return $this->container->get('templating')->render($view, $parameters);

既然你的服务中已经有了容器,你就可以像上面的例子一样使用它。

注意:将整个容器注入(inject)服务被认为是不好的做法,在这种情况下您应该只注入(inject)模板引擎并在模板对象上调用 render 方法。

如此完整的图片:

services.yml:

services:
    your_service_name:
        class: Acme\YourSeviceClass
        arguments: [@templating]

你的类(class):

public function __construct($templating)
{ 
    $this->templating = $templating
}

和你的渲染调用:

$this->templating->render($view, $parameters)

关于php - 如何在 symfony2 服务中执行 $this->render()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909308/

相关文章:

php - 为什么不使用工厂模式进行排序?

php - Sublime 3 PHP/HTML 语法高亮

symfony - 404页面无法使用安全组件?

Symfony Encore : Cannot determine webpack context.(你是从项目外的目录执行 webpack 吗?)

php - 在 PHP 中使用 SQL 从多个表中删除

javascript - 如何在laravel中使用jquery ajax保存多个表单数据?

orm - Symfony2 - 学说 :create in Production

php - 如何在 Twig 插值中嵌入双引号?

php - 合并数组内部数组

mysql - 在 2 个字段中搜索全名