2011-11-16 51 views
33

我目前正在提升我們的項目的CakePHP 2.0之一。不幸的是,代碼的「第一行」會造成問題,而我找不到解決這個問題的辦法。加載供應商文件中的CakePHP 2.0

在CakePHP 1.3中,在AppController類被定義之前,我有一個App::import("Vendor", "facebook");聲明。所引用的文件位於/app/vendors/facebook/facebook.php(幷包括其自身base_facebook.php文件)。

我現在在CakePHP的2.0根據文件命名和類加載嘗試了很多不同的方式,包括文件說明如下:File naming and class loading changes in CakePHP 2.0

我改名的路徑,app/Vendor/Facebook/Facebook.php,或app/Vendor/Facebook/facebook.php,並嘗試以下方法:

App::uses("Facebook", "Vendor/Facebook"); 
App::uses("Facebook", "Facebook"); 
App::uses("Facebook", "Vendor/Facebook/Facebook.php"); 
App::uses("Facebook", "Vendor"); 

有沒有人找到一種方式來引用供應商檔案嗎?由於延遲加載,上面的方法不會引發錯誤/警告,因此調試它是一種惱人的做法......

回答

53

供應商無法在CakePHP中使用App::uses()加載,這是因爲CakePHP不能期望外部庫遵循關於文件夾和文件命名的相同標準。您仍然可以像在框架的1.3版中一樣使用App::import('Vendor', ...)。現在

,使用App::import()對於廠商是一種愚蠢的,如果你想想看。這只是一個昂貴的,詳細而且非常愚蠢的包裝require_once()

在2.0中,我們實際上是在鼓勵人們使用要求或require_once他們的供應商庫。您可以使用App::path('Vendor')APP . 'Vendor' . DS獲取供應商文件夾的位置。

+0

嗨何塞, THX快速回復的做同樣例如App ::進口()。 require_once工作得很好 - 我沒有想到這一點。儘管如此,舊的App :: import(「Vendor」,...)語法不適用於我。 –

+2

順便說一句,舊的App :: import()用法,因爲你顯示它不會工作,因爲你需要提供類的相對路徑。由於性能原因,import()不會再遞歸查看目錄。 我聽說過有關它的報道,但沒有在問題跟蹤器中打開票。但是,該功能的單元測試都按預期順利通過。我會嘗試寫一個真實世界的例子來驗證它是否按預期工作。謝謝! –

+4

所以App :: import(「Vendor」,「Facebook/Facebook」)應該在你的情況下做到這一點。 – mark

0

蛋糕文檔建議使用App ::使用() including-files-with-app-import

然而,它也指出,如果你有一個非斯塔納德插件使用App :: import()的

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php')); 
0

假設你'r供應商文件位於/app/vendors/facebook/facebook.php這裏。

以下行應在舊版本的CakePHP

require_once(ROOT . DS . 'app' . DS .'Vendor' . DS . 'facebook' . DS . 'src' . DS . 'facebook.php'); 

$facebookApi = new facebook();