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'"

然后它失败了,因为它需要其他文件(应该使用命名空间加载)。根供应商文件夹位于包含路径中,并且外部脚本似乎将命名空间设置为“namespace Sabberworm\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 回答