超薄应用程序错误类型 - Twig_Error_Loader

时间:2016-04-13 10:29:48

标签: php 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}

我没有得到错误实际上是什么。我的网站在localhost上使用 https 进行保护,因为这是我的客户的要求。我已经为我的xampp项目安装了SSL证书,但仍然在https上,这个问题就出现了。

我的xampp版本v3.2.2和php 5.6.19

之前有没有人遇到过同样的问题。提前致谢,以便快速回复。

更新folder structure

更新2

这是我的配置文件,我使用苗条的

 $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;

UPDATE3

$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));
}

1 个答案:

答案 0 :(得分:0)

从我从追溯中可以看出,它无法找到模板。我认为原因是因为所有路径都相对于传递给Twig构造函数的路径。

例如,如果我在实例化Twig时传递了templates/views,而我的Twig文件位于templates/views/home.twig,那么我所要做的就是$app->render("home.twig");

<强>更新

查看我使用Slim 2完成的项目,看起来当您实例化Slim时,您可以传递另一个选项,指定Twig将查找模板的root。请考虑以下代码:

$app = new Slim([
    "view" => new Twig(),
    "templates.path" => "path/to/views/folder",
]);

完成后,您就可以按照我的说法进行操作。

更新2

重读您发布的错误消息,我注意到它正在查看./templates。现在假设/templates与问题中发布的templates文件夹相同,您可以使用twig文件的相对路径,在本例中为routes/home/home.twig。现在,您尝试渲染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__)获取文件名。