使用Slim框架和Twig模板出现错误

3

我正在尝试让Slim框架与Twig模板系统协同工作,以下是我index.php的一部分:

// Twig [Template]
require 'Extras/Views/Twig.php';
TwigView::$twigDirectory = __DIR__ . '/vendor/Twig/lib/Twig/';

//Slim
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim(array(
    'view' => $twigView
));

这是我的结构

Extras
    |_Views
        |_Twig.php
Slim
templates
vendor
    |_Twig
        |_lib
            |_Twig
index.php

我尝试了其他配置并进行了搜索,但始终出现此错误:

Fatal error: Class 'Slim\View' not found in C:\wamp\www\slim\Extras\Views\Twig.php on line 43

有没有人能在这里帮助我?我找到的所有示例都使用了composer。

3个回答

2

好的, 我解决了。 这就是解决方案:

// Slim PHP
require "Slim/Slim.php";
\Slim\Slim::registerAutoloader();

// Twig
require "Twig/lib/Twig/Autoloader.php";
Twig_Autoloader::register();

// Start Slim.
/** @var $app Slim */
$app = new \Slim\Slim(array(
    "view" => new \Slim\Extras\Views\Twig()
));

现在这是我的结构。
Slim
|_Extras
    |_Views
        |_Twig.php
|_Slim
templates
Twig
 |_lib
   |_Twig
      |_Autoloader.php
index.php

希望这能帮助其他人!


你的问题已经解决了... :) 很抱歉回复晚了,我非常忙,所以没能在我的博客indoallcode.com上看到你的请求。 - viyancs
正是我所需要的,现在我在想如何设置模板目录,或者是否需要设置以及默认在哪里。 - CTS_AE
@CTS_AE 也许你应该提出一个新问题,但是可以尝试这个链接: http://twig.sensiolabs.org/doc/api.html `require_once '/path/to/lib/Twig/Autoloader.php'; Twig_Autoloader::register();$loader = new Twig_Loader_Filesystem('/path/to/templates'); $twig = new Twig_Environment($loader, array( 'cache' => '/path/to/compilation_cache', ));` - Gonz
1
@gonzalon 我想编辑我的上一条评论,但是无法编辑,我猜我只能发两次?不过当我在初始化Slim pass时发现了答案,即在 'templates.path' => '../private/templates/' 中。如果你搜索模板路径,它在slim文档中有提到。 - CTS_AE

2

现在 Slim-Extras 已经被弃用,我们必须使用 Slim-Views (https://github.com/codeguy/Slim-Views):

require "Slim/Slim.php";
\Slim\Slim::registerAutoloader();

$slim = new \Slim\Slim( array(
        'debug' => false, 
        'templates.path' => 'fooDirTemplates', 
        'view' => '\Slim\Views\Twig'
    ));

$twigView = $slim->view();
$twigView->parserOptions = array(
        'debug' => false
    );
$twigView->parserDirectory = 'Twig';
$twigView->parserExtensions = array(
        '\Slim\Views\TwigExtension'
    );

$slim->notFound( 'fooNotFoundFunction' );
$slim->error( 'fooErrorFunction' );

// SLIM routes...

$slim->run();

1
如果有人仍然遇到这个问题。 对我来说,问题是我安装了slim/views和slim/twig-view两个库。 我卸载了slim/views,问题得以解决。

欢迎来到Stackoverflow。您介意再详细解释一下吗?这样其他程序员也能更好地理解它如何帮助解决问题。 - Nagama Inamdar
我认为这是命名空间的冲突 - packagist上的两个包slim/viewsslim/twig-view都提供了类\Slim\Views\Twig,因此您不能同时使用这两个包而不会出现一些不一致。slim\views包支持Twig和Smarty,而且得到更好的支持,是一个“官方”的slim包。Composer不在乎两个包具有相同命名空间的类 - 它只会使用它找到的第一个包而不会抱怨,并且如果您不小心,您最终可能会得到多个包的混合体。 - Jason
@Beanz - 这也是我的问题。从我阅读有关slim和twig的各种地方来看,这并不清楚,但当我添加 slim/twig-view并删除slim/views时,它可以工作。 - Hans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接