【问题标题】:Using Twig with a Slim application将 Twig 与 Slim 应用程序一起使用
【发布时间】:2013-01-13 09:46:29
【问题描述】:

我正在为我正在开发的一个简单网站使用 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 的视图文件存储在哪里。

我在 Google 上搜索过,但很多信息都是针对旧版本的 Slim 的,而且缺少 Slim 文档本身。

谢谢!

【问题讨论】:

    标签: php twig slim


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      较新的 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();
      

      note 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 */ ) );
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 2016-11-29
        • 2012-12-29
        • 1970-01-01
        • 2018-10-21
        相关资源
        最近更新 更多