twig:如何在不使用symfony时添加Twig扩展文件

时间:2013-03-13 12:27:26

标签: php twig

我目前正在使用v1.12.2 Twig作为独立的模板引擎。

我在名为UtilityExtension.php的文件中写了一个名为Utility_Twig_Extension的Twig扩展名

和index.php

//index.php
require_once '../vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem(OEBPS);
$twig = new Twig_Environment($loader, array(
    'cache' => APP . DS . 'cache',
));

require_once '../vendor/twig/twig/ext/utility/UtilityExtension.php';

$twig->addExtension(new Utility_Twig_Extension());

这是UtilityExtension.php     //UtilityExtension.php     namespace UtilityTwigExtension;

class Utility_Twig_Extension extends Twig_Extension
{
    public function getName()
    {
        return "utility";
    }

}

这是我的目录结构:

src
 |__app
 |    |__ index.php
 |__vendor
      |__twig
           |__twig
               |__ext
               |__lib

我甚至无法正确加载文件。

我已经将问题追溯到扩展类试图扩展Twig_Extension.php的事实。

所以我require_once Twig_Extension,它是UtilityExtension.php中的Extension.php文件。但是,仍然无法正常工作。

大多数文档都讨论了在Symfony的上下文中添加自定义Twig扩展。

我正在使用Twig独立,所以我还没有找到任何相关的文档。

请告知。

UPDATE1:

通过不工作,我的意思是我得到500服务器错误。我运行error_reporting(E_ALL)无济于事。

当我从扩展程序中删除单词extends Twig_Extension时,错误就解除了。

UPDATE2: 我意识到这是命名空间问题。因为我从UtilityExtension.php中删除了namespace UtilityTwigExtension;,服务器500错误消失了。

所以我把namespace UtilityTwigExtension;放回去,然后打电话给

require_once '../vendor/twig/twig/ext/utility/UtilityExtension.php';

$twig->addExtension(new UtilityTwigExtension\Utility_Twig_Extension());

错误又回来了。

问题:如果我坚持使用命名空间,如何调用TwigExtension?有没有更好的方法来使用命名空间?

UPDATE3:

在尝试Luceos回答后我仍然得到服务器500.

error_reporting(E_ALL);
require_once 'constants.php';

require_once 'ZipLib.php';

require_once '../vendor/twig/twig/lib/Twig/Autoloader.php';
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem(OEBPS);

$twig = new Twig_Environment($loader, array(
    'cache' => APP . DS . 'cache',
));

require_once '../vendor/twig/twig/ext/utility/UtilityExtension.php';

use UtilityTwigExtension\Utility_Twig_Extension;

$twig->addExtension(new Utility_Twig_Extension());

UtilityExtension.php

namespace UtilityTwigExtension;

class Utility_Twig_Extension extends Twig_Extension
{
    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName() {
        return 'utility';
    }

}

1 个答案:

答案 0 :(得分:1)

所以,让我们把评论放在一个答案中,然后从那里继续前进,不要惹恼评论:

首先从正确的命名空间调用扩展名:

use UtilityTwigExtension\Utility_Twig_Extension;
$twig->addExtension(new Utility_Twig_Extension());

使用和命名空间调用通常位于文件的顶部。

您还可以尝试使用以下命令直接调用命名空间+对象:

$twig->addExtension(new UtilityTwigExtension\Utility_Twig_Extension());

更新3

Utility_Twig_Extension从名称空间UtilityTwigExtension扩展了Twig_Extension,该名称空间不存在。我假设Twig_Extension不在任何名称空间中,所以你将使用\ Twig_Extension:

namespace UtilityTwigExtension;

class Utility_Twig_Extension extends \Twig_Extension
{
    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName() {
        return 'utility';
    }

}