苗条的应用程序错误类型 - Twig_Error_Loader
Slim Application Error type- Twig_Error_Loader
我是 slim 框架的新手,正在开发一个实时视频流应用程序。这是我添加到堆栈溢出帐户的第一个问题。我已经安装了应用程序并使用 composer 添加了所有必要的需求依赖项。我在 xampp localhost
上打开应用程序时遇到以下问题
错误:
Type: Twig_Error_Loader
Message: Unable to find template "C:/xampp/htdocs/local/dev/templates/routes/home/home.twig" (looked into: ./templates).
File: C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Loader\Filesystem.php
Line: 215
Trace
#0 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Loader\Filesystem.php(139): Twig_Loader_Filesystem->findTemplate('C:\xampp\htdocs...')
#1 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Environment.php(264): Twig_Loader_Filesystem->getCacheKey('C:\xampp\htdocs...')
#2 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Environment.php(322): Twig_Environment->getTemplateClass('C:\xampp\htdocs...', NULL)
#3 C:\xampp\htdocs\local\dev\vendor\slim\views\Twig.php(87): Twig_Environment->loadTemplate('C:\xampp\htdocs...')
#4 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\View.php(255): Slim\Views\Twig->render('C:\xampp\htdocs...', NULL)
#5 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\View.php(243): Slim\View->fetch('C:\xampp\htdocs...', NULL)
#6 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(757): Slim\View->display('C:\xampp\htdocs...')
#7 C:\xampp\htdocs\local\dev\templates\routes\home\home.php(16): Slim\Slim->render('C:\xampp\htdocs...', Array)
#8 [internal function]: {closure}()
#9 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Route.php(468): call_user_func_array(Object(Closure), Array)
#10 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(1357): Slim\Route->dispatch()
#11 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\Flash.php(85): Slim\Slim->call()
#12 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call()
#13 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php( 67): Slim\Middleware\MethodOverride->call()
#14 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(1302): Slim\Middleware\PrettyExceptions->call()
#15 C:\xampp\htdocs\local\dev\index.php(12): Slim\Slim->run()
#16 {main}
我不明白错误到底是什么。我的网站在本地主机上使用 https 进行保护,因为这是我客户的要求。我已经为我的 xampp 项目安装了 SSL 证书,但仍然在 https 上出现了这个问题。
我的xampp版本v3.2.2和php5.6.19
有没有人遇到过同样的问题。预先感谢您的快速回复。
更新:
更新 2
这是我使用 slim 的配置文件
$app = new \Slim\Slim([
'view' => new \Slim\Views\Twig()
]);
$view = $app->view();
$view->parserExtensions = [new \Slim\Views\TwigExtension()];
$mongo = new MongoClient();
$app->db = $mongo->local;
$app->device = new Mobile_Detect;
更新3
$app->get('/', function() use ($app){
$path = templatePath(__FILE__);
$templateData = [
'pageTitle' => 'Home',
'UI' => [
'noSidebar' => true
]
];
$app->render("$path/home.twig", $templateData);
})->name('home');
//templatepath function that returns the path to $path variable
function templatePath($file) {
return str_replace(getcwd().'/templates/', '', dirname($file));
}
从回溯中可以看出,它找不到模板。我认为这是因为所有路径都是相对于传递给 Twig 构造函数的路径而言的。
例如,如果我在实例化 Twig 时传递了 templates/views
,而我的 Twig 文件位于 templates/views/home.twig
,那么我所要做的就是 $app->render("home.twig");
.
更新
查看我用 Slim 2 完成的项目,看起来当您实例化 Slim 时,您可以传递另一个选项,指定 root
Twig 将在何处查找模板。所以考虑下面的代码:
$app = new Slim([
"view" => new Twig(),
"templates.path" => "path/to/views/folder",
]);
完成后你就可以像我上面说的那样了。
更新 2
重新阅读您发布的错误消息,我注意到它正在查看 ./templates
。现在假设 /templates
与问题中发布的 templates
文件夹相同,您可以使用 twig 文件的相对路径,在本例中为 routes/home/home.twig
。现在,无论您在何处尝试渲染树枝文件,都只需要做 $app->render("routes/path/file.twig");
,当然还需要编辑您真正想要的文件的路径。
更新 3
为了完成,最终代码看起来像这样:
$app = new \Slim\Slim([
"view" => new \Slim\Views\Twig(),
"templates.path" => "/../templates/routes"
]);
$view = $app->view();
$view->parserExtensions = [
new \Slim\Views\TwigExtension()
];
$mongo = new MongoClient();
$app->db = $mongo->local;
$app->device = new Mobile_Detect;
然后在任何您想渲染视图的地方执行此操作:
$app->render("home/home.twig");
编辑 1
回应关于模板函数的评论。看一下您的目录结构,实际上并不需要您只需组合上面的代码然后从 basename(__FILE__)
.
获取文件名的功能
我是 slim 框架的新手,正在开发一个实时视频流应用程序。这是我添加到堆栈溢出帐户的第一个问题。我已经安装了应用程序并使用 composer 添加了所有必要的需求依赖项。我在 xampp localhost
上打开应用程序时遇到以下问题错误:
Type: Twig_Error_Loader
Message: Unable to find template "C:/xampp/htdocs/local/dev/templates/routes/home/home.twig" (looked into: ./templates).
File: C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Loader\Filesystem.php
Line: 215
Trace
#0 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Loader\Filesystem.php(139): Twig_Loader_Filesystem->findTemplate('C:\xampp\htdocs...')
#1 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Environment.php(264): Twig_Loader_Filesystem->getCacheKey('C:\xampp\htdocs...')
#2 C:\xampp\htdocs\local\dev\vendor\twig\twig\lib\Twig\Environment.php(322): Twig_Environment->getTemplateClass('C:\xampp\htdocs...', NULL)
#3 C:\xampp\htdocs\local\dev\vendor\slim\views\Twig.php(87): Twig_Environment->loadTemplate('C:\xampp\htdocs...')
#4 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\View.php(255): Slim\Views\Twig->render('C:\xampp\htdocs...', NULL)
#5 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\View.php(243): Slim\View->fetch('C:\xampp\htdocs...', NULL)
#6 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(757): Slim\View->display('C:\xampp\htdocs...')
#7 C:\xampp\htdocs\local\dev\templates\routes\home\home.php(16): Slim\Slim->render('C:\xampp\htdocs...', Array)
#8 [internal function]: {closure}()
#9 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Route.php(468): call_user_func_array(Object(Closure), Array)
#10 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(1357): Slim\Route->dispatch()
#11 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\Flash.php(85): Slim\Slim->call()
#12 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\MethodOverride.php(92): Slim\Middleware\Flash->call()
#13 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Middleware\PrettyExceptions.php( 67): Slim\Middleware\MethodOverride->call()
#14 C:\xampp\htdocs\local\dev\vendor\slim\slim\Slim\Slim.php(1302): Slim\Middleware\PrettyExceptions->call()
#15 C:\xampp\htdocs\local\dev\index.php(12): Slim\Slim->run()
#16 {main}
我不明白错误到底是什么。我的网站在本地主机上使用 https 进行保护,因为这是我客户的要求。我已经为我的 xampp 项目安装了 SSL 证书,但仍然在 https 上出现了这个问题。
我的xampp版本v3.2.2和php5.6.19
有没有人遇到过同样的问题。预先感谢您的快速回复。
更新:
更新 2
这是我使用 slim 的配置文件
$app = new \Slim\Slim([
'view' => new \Slim\Views\Twig()
]);
$view = $app->view();
$view->parserExtensions = [new \Slim\Views\TwigExtension()];
$mongo = new MongoClient();
$app->db = $mongo->local;
$app->device = new Mobile_Detect;
更新3
$app->get('/', function() use ($app){
$path = templatePath(__FILE__);
$templateData = [
'pageTitle' => 'Home',
'UI' => [
'noSidebar' => true
]
];
$app->render("$path/home.twig", $templateData);
})->name('home');
//templatepath function that returns the path to $path variable
function templatePath($file) {
return str_replace(getcwd().'/templates/', '', dirname($file));
}
从回溯中可以看出,它找不到模板。我认为这是因为所有路径都是相对于传递给 Twig 构造函数的路径而言的。
例如,如果我在实例化 Twig 时传递了 templates/views
,而我的 Twig 文件位于 templates/views/home.twig
,那么我所要做的就是 $app->render("home.twig");
.
更新
查看我用 Slim 2 完成的项目,看起来当您实例化 Slim 时,您可以传递另一个选项,指定 root
Twig 将在何处查找模板。所以考虑下面的代码:
$app = new Slim([
"view" => new Twig(),
"templates.path" => "path/to/views/folder",
]);
完成后你就可以像我上面说的那样了。
更新 2
重新阅读您发布的错误消息,我注意到它正在查看 ./templates
。现在假设 /templates
与问题中发布的 templates
文件夹相同,您可以使用 twig 文件的相对路径,在本例中为 routes/home/home.twig
。现在,无论您在何处尝试渲染树枝文件,都只需要做 $app->render("routes/path/file.twig");
,当然还需要编辑您真正想要的文件的路径。
更新 3
为了完成,最终代码看起来像这样:
$app = new \Slim\Slim([
"view" => new \Slim\Views\Twig(),
"templates.path" => "/../templates/routes"
]);
$view = $app->view();
$view->parserExtensions = [
new \Slim\Views\TwigExtension()
];
$mongo = new MongoClient();
$app->db = $mongo->local;
$app->device = new Mobile_Detect;
然后在任何您想渲染视图的地方执行此操作:
$app->render("home/home.twig");
编辑 1
回应关于模板函数的评论。看一下您的目录结构,实际上并不需要您只需组合上面的代码然后从 basename(__FILE__)
.