[英]twig: How to add Twig extension file whilst NOT using symfony
我目前正在使用Twig v1.12.2作為獨立的模板引擎。
我在名為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,所以我還沒有找到任何文檔。
請指教。
UPDATE1:
通過不工作,我的意思是我得到了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? 有沒有更好的使用命名空間的方法?
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';
}
}
因此,讓我們將評論放在答案中,然后從那里繼續前進,而不會引起評論的擁擠:
首先從正確的名稱空間調用擴展:
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';
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.