将 Twig 与 Slim 应用程序一起使用


Using Twig with a Slim application

我正在为我正在开发的简单网站使用 Slim 框架,并且还想使用 Twig 模板引擎。

我已经安装了Slim,Slim Extras和Twig,我的index.php文件包含以下内容:

<?php
/* Require and initialize Slim and Twig */
require 'Slim/Slim.php';
'Slim'Slim::registerAutoloader();
require 'Twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register();
$app = new 'Slim'Slim(array(
    'view' => new 'Slim'Extras'Views'Twig()
));
/* Application routes */
$app->get('/', function () {
    $pageTitle = 'hello world';
    $body = 'sup world';
    $app->view()->setData(array('title' => $title, 'body' => $body));
    $app->render('index.html');
});
/* Run the application */
$app->run();

但是,这会导致错误:Fatal error: Call to a member function view() on a non-object in C:'xampp'htdocs'index.php on line 18

我承认我不知道如何正确使用Twig和Slim。我关注了一篇关于目录结构以及如何加载 Twig 的 StackOverflow 帖子,但我不知道如何将一些自定义数据添加到视图中,也不知道 Twig 的视图文件应该存储在哪里。

我用谷歌搜索了一下,但很多信息都是针对旧版本的 Slim 的,并且缺少 Slim 文档本身。

谢谢!

这是一个简单的php错误。您正在尝试访问未导入其范围的闭包中的变量,请像这样修复它:

$app->get('/', function () use ($app) {
    // $app will work here
});

较新的 Slim 框架(我相信 2.2+)布局作为作曲家组件出现。Twig 文档对于在哪里放置什么以及如何向对象解释它有点模糊。我花了一些时间来弄清楚如何初始化简单的文件系统环境。如果有人踩到这个问题,希望它有所帮助:

例:

在工作/当前文件夹中,我有以下文件夹/文件:

templates
    home_page.html
vendor
    slim
    twig
    .
    .
index.php
composer.json

Templates是我将放置 Twig 模板文件的地方,vendor是组件所在的文件夹(Slim、Twig ...其余的),index.php是 Slim 应用程序,composer.json是作曲家的控制文件。

我的初始化如下所示:

    <?php
    require_once 'vendor/autoload.php';
    // require 'Slim/Slim.php'; (old way)
    'Slim'Slim::registerAutoloader();
    $loader = new Twig_Loader_Filesystem('./templates');
    $twig = new Twig_Environment($loader /* ,array(twig config) */);
    $app = new 'Slim'Slim();

注意 Twig_Loader_Filesystem 使用加载器(花了我一些时间来弄清楚出了什么问题,因为 Twigs 的第一个示例使用$loader = new Twig_Loader_String();并且它不会从文件呈现,直到您发现您已经写了一件事并期望做另一件事。

渲染如下:

$template = $twig->loadTemplate('home_page.html');
echo $template->render( array( /* values for template */ ) );

或:

echo $twig->render('home_page.html',array( /* values for template */ ) );

不要忘记:函数(/*参数*/)使用($app,$twig)到达树枝对象。

安全:请注意,制作.php模板比.html更安全,因为 Slim 不覆盖/保护文件系统中存在的文件夹,因此例如 apache 将直接发送文件根本不咨询 Slim,或者,将模板放在网络空间之外。