1

私のアプリケーションでは、PSR-0名前空間を使用しています。すべてが美しく機能します!

テンプレートパーサーとしてTwigを使用するまで、TwigはPEAR疑似名前空間を使用します。Twig_Loader_Filesystemのように。

問題は、名前間隔のあるアプリケーション内でTwigを次のように使用したい場合です。

<?php
namespace Tact\ViewManager;

class ViewManager {

    public function init()
    {
        $loader = new Twig_Loader_Filesystem($this->templatepath);
        $this->twig = new Twig_Environment($loader);
    }  
}
?>

PHPは、オートローダーにという名前のクラスを探すように指示しますTact\ViewManager\Twig_Loader_Filesystem

呼び出し側クラスのPSR-0名前空間なしでPEAR名前空間スタイルクラスを自動ロードするにはどうすればよいですか?

私のオートローダーは、PEARとPSR-0の両方をロードできます。

前もって感謝します!

4

2 に答える 2

2

これは、Tact\ViewManager名前空間にいるためです。疑似名前空間クラスは実際にはグローバル名前空間にあるため、それら\を呼び出すにはプレフィックスを付ける必要があります。

$loader = new \Twig_Loader_Filesystem($this->templatepath);

\プレフィックスがあなたを悩ませている場合、あなたはこれを行うことができます:

namespace Tact\ViewManager;

use Twig_Loader_Filesystem;
use Twig_Environment;

class ViewManager {
    public function init()
    {
        $loader = new Twig_Loader_Filesystem($this->templatepath);
        $this->twig = new Twig_Environment($loader);
    }  
}
于 2012-09-12T10:56:07.190 に答える
0

これを試して:

    $loader = new \Twig_Loader_Filesystem($this->templatepath);
    $this->twig = new \Twig_Environment($loader);

これにより、PHPは「ルート」レベルでnamespace \ classルックアップを強制し、オートローダーが名前空間と通常のPEAR規則クラス名の両方をロードするように設定されている場合は機能します。

于 2012-09-12T10:56:44.660 に答える