我目前使用 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 命名空间 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,所以我还没有找到任何关于它的文档。
请指教。
更新1:
通过不工作,我的意思是我收到 500 服务器错误。我跑了 error_reporting(E_ALL) 无济于事。
当我extends Twig_Extension
从扩展类中删除单词时,错误就得到了缓解。
UPDATE2:
我意识到这是一个命名空间问题。因为我 namespace UtilityTwigExtension;
从 UtilityExtension.php 中删除了,并且服务器 500 错误消失了。
所以我把namespace UtilityTwigExtension;
后面然后打电话
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';
}
}