如何在控制器外获取$ view

时间:2012-12-27 04:42:21

标签: symfony

我知道$ view可以在渲染的模板文件中访问,但是我想知道是否有我可以在其他地方获取它?

原因是我在经典/遗留系统之上构建SF2,并且某些模板无法使用普通的渲染方法进行渲染。但是,我仍然希望能够访问这些模板中的视图助手,因此我想初始化一个可以在这些旧模板中使用的全局$视图

1 个答案:

答案 0 :(得分:1)

这些助手在Templating组件(docs)的PhpEngine类中提供。您可以使用templating.engine.php服务访问此类(您需要启用PHP作为模板引擎)。

从控制器看起来如下:

// ...
public function fooAction(...)
{
    // ...
    $template = $this->get('templating.engine.php')->render(...);
}

如果您正在使用其他课程,则应使用DI:

// src/Acme/DemoBundle/Foo.php
namespace Acme\DemoBundle;

use Symfony\Component\Templating\EngineInterface;

class Foo
{
    private $templating;

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

    public function bar()
    {
        // ...
        $template = $this->templating->render(...);
    }
}
// app/config.yml
services:
    acme_demo:
        foo:
            class: Acme\DemoBundle\Foo
            arguments: [@templating.engine.php]

有关the docs中的DI的更多信息。