4

名前空間を使用するcssパーサーを使用したいと思います。ファイルをベンダーに入れて、アプリがインポートしました。しかし、スクリプト自体はそのクラスを見つけていないようです

クラスの一番上で、ファイルをインポートします。

App::import('Vendor', 'Sabberworm', array('file' => 'Sabberworm/CSS/Parser.php'));

これは/root/ vendors / Sabberworm / CSS /にあります(すべてのファイルはこの名前空間にあります)

クラスメソッド内に新しいインスタンスを作成します。

public function parse($content) {
    $oParser = new Sabberworm\CSS\Parser($content);
    ...
}

ここまでは順調ですね。$oCss = $oParser->parse();しかし、私が今それを致命的なエラーと呼びたい場合:

"Fatal error: Class 'Sabberworm\CSS\CSSList\Document'"

他のファイル(名前空間を使用してロードする必要があります)が必要なため、失敗します。ルートベンダーフォルダはインクルードパスにあり、外部スクリプトは名前空間を「namespaceSabberworm\CSS;」に設定しているようです。私は何が欠けていますか?私は名前空間に少し慣れていません。

4

1 に答える 1

9

これをブートストラップに追加します

spl_autoload_register(function($class) {
    foreach(App::path('Vendor') as $base) {
        $path = $base . str_replace('\\', DS, $class) . '.php';
        if (file_exists($path)) {
            return include $path;
        }
    }
});

または、関数内でこれだけ:

$path = APP . 'Vendor' . DS . str_replace('\\', DS, $class) . '.php';
if (file_exists($path)) {
    include $path;
}
于 2012-08-05T20:15:08.373 に答える