0

現在、スタンドアロンのテンプレート エンジンとして 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';
    }

}
4

1 に答える 1

1

それでは、コメントを回答に入れ、コメントを混雑させずにそこから先に進みましょう。

最初に、正しい名前空間から拡張機能を呼び出します。

use UtilityTwigExtension\Utility_Twig_Extension;
$twig->addExtension(new Utility_Twig_Extension());

use および namespaces の呼び出しは、通常、ファイルの先頭に配置されます。

次を使用して、名前空間 + オブジェクトを直接呼び出すこともできます。

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

}
于 2013-03-13T12:46:09.937 に答える