我有一个在开发中运行良好的服务。看起来有点像这样:
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'
- 即使用字符串而不是数组 - 但这并没有影响任何内容。)
任何人都知道为什么不同环境的行为会有所不同?
答案 0 :(得分:0)
Symfony允许通过@Template(engine='foo')
(doc)为每个控制器操作设置不同的引擎。
旧回答:
对于开发环境,您不会有一些额外信息 关于模板渲染过程(时间,内存消耗,数量 提交的块等等)。此信息可以通过分析器或 默认配置中的开发工具栏。
然而,对于您来说,这通常会浪费在您的生产环境中 想要表现。
因此,匹配不同的需求框架有不同的配置 对于prod / dev环境。
这可以在没有DelegatingEngine的情况下实现。请参阅TimedPhpEngine。