php - 将 Injector 别名从 Mustache_Engine 切换到 Twig
问题描述
我目前正在使用一个教程来学习如何在没有框架的情况下制作一个 php 项目,以便我可以更多地理解框架。我已经解决了这个问题,但我被困在一个点上,我要将喷油器从 Mustache_Engine 切换到 Twig
/**
* Mustache Renderer
*/
/*$injector->alias('Todo\Template\Renderer', 'Todo\Template\MustacheRenderer');
$injector->define('Mustache_Engine', [
':options' => [
'loader' => new Mustache_Loader_FilesystemLoader(dirname(__DIR__) . '/templates', [
'extension' => '.html',
]),
],
]);*/
/**
* Twig Environment
*/
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('Twig_Environment', function () use ($injector) {
$loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
return new Twig_Environment($loader);
});
但我得到的只是以下错误
逻辑异常
您必须先设置加载程序。
我不知道如何解决这个问题,但我觉得我在这里做错了,因为很多人都看过这个教程。
为清晰起见编辑添加屏幕截图
解决方案
您可以通过 2 种不同的方式修复此错误。
第一种方式,只需替换Twig_Environment
为\Twig\Environment
,这里是完整的示例代码:
/**
* Twig Environment
*/
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('\Twig\Environment', function () use ($injector) {
$loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
return new Twig_Environment($loader);
});
第二种方式,添加 alias $injector->alias(\Twig\Environment::class, 'Twig_Environment');
,这里是完整的示例代码:
/**
* Twig Environment
*/
$injector->alias('Todo\Template\Renderer', 'Todo\Template\TwigRenderer');
$injector->delegate('Twig_Environment', function () use ($injector) {
$loader = new Twig_Loader_Filesystem(dirname(__DIR__) . '/templates');
return new Twig_Environment($loader);
});
$injector->alias(\Twig\Environment::class, 'Twig_Environment');
您可以在此处找到有关此错误的更多信息:https ://github.com/twigphp/Twig/issues/2907
简而言之,关于错误:从版本 1.38.0 Twig 包开始使用命名空间类作为默认类(PSR-0 是别名)。您可以在此处找到更多详细信息https://github.com/twigphp/Twig/pull/2862以及更改日志https://github.com/twigphp/Twig/blob/3.x/CHANGELOG#L447
推荐阅读
- c# - 如果两个脚本都没有附加到任何游戏对象,我如何从另一个脚本访问脚本?
- gcc - gcc 程序可以检测何时启用链接时间优化 (-flto)?
- sql - 与嵌套选择一起使用时,Ignite 的合并 SQL 不插入新行
- python - 为什么我在使用 2-dim 卷积输入层时会出现尺寸错误?
- python - 在 Python/Pandas 中使用 Regex 运算符有条件地计算数据条目
- json - 如果对象名称包含单引号,我如何选择 JSON_VALUE?
- python - 用python填充没有名称的输入标签
- azure - 无法从 corpnet 网络连接到 azure 事件中心
- npm - 通过 Package Feed Activity 进行持续集成
- ms-access - 交叉表报告 MS-Access 中的多个值