2012-09-02 36 views
0

我想在我的symfony項目中使用php-ga第三方庫。我已經安裝了庫apps/<app>/lib,清除緩存,以及第三方文件顯示爲我期望在config_autoload.yml.php爲什麼symfony找不到我的自動加載類?

'tracker' => 'C:/wamp/www/apps/api/lib/php-ga/GoogleAnalytics/Tracker.php', 
'transaction' => 'C:/wamp/www/apps/api/lib/php-ga/GoogleAnalytics/Transaction.php', 
... 

然而,當我嘗試使用類在相同的應用程序,像這樣下一個動作:

use UnitedPrototype\GoogleAnalytics; 

public function executeNew(sfWebRequest $request) 
{ 
    $tracker = new GoogleAnalytics\Tracker(...); 
    ... 

我得到一個錯誤說,它不能解析類:

Fatal error: Class 'UnitedPrototype\GoogleAnalytics\Tracker' not found in C:\wamp\www\apps\api\modules\encoding\actions\actions.class.php

我錯過了什麼?

回答

3

Symfony的自動加載器無法正確加載名稱空間類。我認爲你應該將ga lib移動到lib/vendor/php-ga並在config/ProjectConfiguration.class.php(如require_once __DIR__ . '/../lib/vendor/php-ga/autoload.php')中使用它自己的自動加載器。

+0

好信息!事實證明(我的版本)symfony也期望自動加載器是數組,所以我必須[使用靜態方法將php-ga的自動加載器轉換爲類](http://www.php.net/manual/en/ function.spl-自動加載-register.php#84086)。之後,它的工作,但 - 謝謝你! – ladenedge

+0

很高興提供幫助,但我認爲這與symfony無關。您應該將任何供應商lib放在'lib/vendor'下,默認情況下(從v1.3開始),這個目錄從symfony的自動加載機制中排除。 – 1ed

+0

我確實將它移動到'lib/vendor',並且這些類從* config_autoload.yml.php *中消失。但是,symfony使用'spl_autoload_functions()'枚舉* sfAutoloadAgain.class.php *中的所有自動加載器,並將該值作爲數組處理。 – ladenedge