2012-08-05 60 views
4

我想使用一個使用命名空間的css解析器。我把這些文件放在供應商和應用程序中。但腳本本身似乎並沒有找到它的類供應商文件中的命名空間(CakePHP2.x和PHP5.4.3)

在我班上的第一名我導入文件:

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

這是在/根/供應商/ Sabberworm/CSS /(所有文件都在這個命名空間)

在我的類中的方法創建一個新的實例:

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

到目前爲止好。但是,如果我現在想調用$oCss = $oParser->parse();它致命錯誤:

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

那麼它失敗,因爲它要求的其他文件(應該使用名稱空間加載)。根供應商文件夾位於包含路徑中,外部腳本似乎將命名空間設置爲「命名空間Sabberworm \ CSS;」。我錯過了什麼?我對命名空間有點新鮮。

回答

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; 
} 
+0

我喜歡的第一個。它立即工作(我把它放到使用供應商的東西的lib類中)。非常感謝!現在我可以繼續使用AssetSprite的東西了。 – mark 2012-08-05 21:08:02

+0

我引用它在http://www.dereuromark.de/2012/08/06/namespaces-in-vendor-files-and-cake2-x/ – mark 2012-08-06 09:23:17

+0

如何在cakephp 1.2和1.3 – 2012-12-04 00:47:21