Php twig:如何在不使用symfony的情况下添加twig扩展名文件

Php twig:如何在不使用symfony的情况下添加twig扩展名文件,php,twig,Php,Twig,我目前使用v1.12.2twig作为一个独立的模板引擎 我在一个名为UtilityExtension.php的文件中编写了一个名为Utility_Twig_extension的小树枝扩展名 namespace UtilityTwigExtension; class Utility_Twig_Extension extends Twig_Extension { /** * Returns the name of the extension. * * @ret

我目前使用v1.12.2twig作为一个独立的模板引擎

我在一个名为UtilityExtension.php的文件中编写了一个名为Utility_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';
    }

}
和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 命名空间实用程序twigextension

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_扩展名,它是UtilityExtension.php中的Extension.php文件。但是,仍然不起作用

大多数文档都谈到在Symfony的上下文中添加自定义细枝扩展

我正在使用Twig standalone,所以我还没有找到任何关于它的文档

请告知

更新1:

我不工作的意思是我得到了500服务器错误。我运行了错误报告(E_ALL),但没有结果

当我从扩展类中删除单词
extensedtwig\u Extension
时,错误就消失了

更新2:
我意识到这是一个名称空间问题。因为我删除了
名称空间实用程序twigextension和服务器500错误消失


因此,我将
名称空间实用程序twigextension返回,然后呼叫

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

$twig->addExtension(new UtilityTwigExtension\Utility_Twig_Extension());
错误又回来了

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

更新3:

在尝试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';
    }

}

因此,让我们把评论放在一个答案中,然后在不拥挤评论的情况下继续前进:

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

use UtilityTwigExtension\Utility_Twig_Extension;
$twig->addExtension(new Utility_Twig_Extension());
使用和名称空间调用通常放在文件的顶部

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

$twig->addExtension(新实用工具twigextension\Utility_twig_Extension())

更新3

实用工具Twig扩展扩展扩展了命名空间UtilityTwigeExtension中的Twig扩展,该命名空间UtilityTwigeExtension不存在。我假设Twig\u扩展不在任何名称空间中,因此您将使用\Twig\u扩展:

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';
    }

}

在Twig网站上展示了如何做,但没有提到symfony。第一个谷歌结果“小枝添加扩展”,我按照那里的步骤。除非我忽略了什么?是的,但你知道你的扩展实际上什么都没做,对吗?你怎么知道它没有被加载?“它不工作”没有帮助。
命名空间实用程序twigextension
?您是否在自己的命名空间中创建了UtilityTwigExtension?然后需要添加扩展名:
$twig->addExtension(new UtilityTwigExtension\Utility_twig_extension())@ColinMorelli我道歉。我的意思是我有一个服务器500错误。我已经改正了,非常感谢。我试过你的答案。但是没有成功。更新3列出了我所做的更改。我使用名称空间的时间很短,但我完全明白它的意义。因此,如果可以,尽量多用它;尤其是大型项目。