使用带有Slim应用程序的Twig

时间:2013-01-29 18:10:23

标签: php twig slim

我正在使用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。我在目录结构上跟踪了StackOverflow帖子以及如何加载Twig,但我不知道如何向视图添加一些自定义数据,我不知道应该存储Twig的视图文件。

我用谷歌搜索,但很多信息是针对旧版本的Slim而缺乏Slim文档本身。

谢谢!

2 个答案:

答案 0 :(得分:15)

这是一个简单的php错误。您正在尝试访问未导入其范围的闭包中的变量,请按以下方式进行修复:

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

答案 1 :(得分:2)

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

示例:

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

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

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

我的初始化如下:

composer.json

注意带有加载程序的 Twig_Loader_Filesystem (花了一些时间来弄清楚自从Twigs第一个示例使用 <?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(); 后出现了什么问题,并且直到您发现事实为止,它才会从文件中呈现写了一件事,并希望做另一件事。

渲染如下:

$loader = new Twig_Loader_String();

或:

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

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

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