为什么Symfony的@templating服务在dev和prod中提供不同的类?

时间:2015-07-15 08:30:42

标签: symfony twig

我有一个在开发中运行良好的服务。看起来有点像这样:

use Symfony\Bundle\TwigBundle\TwigEngine;

public function __construct(TwigEngine $twig)
{
    $this->twig = $twig;
}

// service methods here

我在services.yml中通过传递@templating来实例化它。

在开发中,一切都运行良好,但在我们的暂存环境(使用Symfony' prod环境)中,我看到了一个500错误,表示参数

must be an instance of Symfony\Bundle\TwigBundle\TwigEngine

但是......

instance of Symfony\Bundle\FrameworkBundle\Templating\DelegatingEngine given.

我通过遵循this semi-related bug report中的建议并在Symfony\Bundle\FrameworkBundle\Templating\EngineInterface上输入提示来解决此问题。

但是,我想知道为什么会发生这种情况 - 为什么在TwigEngine(和dev)中传递了test个实例,但是DelegatingEngine prod

config.yml的相关行看起来像这样:

framework:
    templating: { engines: ['twig'] }

(我尝试将其更改为engines: 'twig' - 即使用字符串而不是数组 - 但这并没有影响任何内容。)

任何人都知道为什么不同环境的行为会有所不同?

1 个答案:

答案 0 :(得分:0)

Symfony允许通过@Template(engine='foo')doc)为每个控制器操作设置不同的引擎。

旧回答:

  

对于开发环境,您不会有一些额外信息   关于模板渲染过程(时间,内存消耗,数量   提交的块等等)。此信息可以通过分析器或   默认配置中的开发工具栏。

     

然而,对于您来说,这通常会浪费在您的生产环境中   想要表现

     因此,匹配不同的需求框架有不同的配置   对于prod / dev环境。

这可以在没有DelegatingEngine的情况下实现。请参阅TimedPhpEngine