簡體   English   中英

twig:如何在不使用symfony的情況下添加Twig擴展文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM