Php twig:如何在不使用symfony的情况下添加twig扩展名文件
我目前使用v1.12.2twig作为一个独立的模板引擎 我在一个名为UtilityExtension.php的文件中编写了一个名为Utility_Twig_extension的小树枝扩展名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
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列出了我所做的更改。我使用名称空间的时间很短,但我完全明白它的意义。因此,如果可以,尽量多用它;尤其是大型项目。