在CakePHP 2.0中加载供应商文件

时间:2011-11-16 20:20:59

标签: php cakephp cakephp-2.0

我目前正在将其中一个项目升级到CakePHP 2.0。不幸的是,代码的“第一行”会产生问题,我无法找到解决该问题的方法。

在CakePHP 1.3中,我在定义App::import("Vendor", "facebook");类之前有一个AppController语句。引用的文件位于/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.phpapp/Vendor/Facebook/facebook.php,并尝试了以下方法:

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

有没有人找到引用供应商文件的方法?由于延迟加载,上面的方法不会触发错误/警告,所以调试它有点烦人......

3 个答案:

答案 0 :(得分:53)

无法使用CakePHP中的App::uses()加载供应商,这是因为CakePHP不能指望外部库遵循有关文件夹和文件命名的相同标准。您仍然可以像在框架的1.3版中那样使用App::import('Vendor', ...)

现在,如果你考虑的话,对供应商使用App::import()是有点愚蠢的。它只是require_once()的一个昂贵,冗长且非常愚蠢的包装器。

在2.0中,我们实际上鼓励人们对其供应商库使用require或require_once。您可以使用App::path('Vendor')或仅APP . 'Vendor' . DS获取供应商文件夹的位置。

答案 1 :(得分:0)

Cake文档建议使用App :: uses() including-files-with-app-import

但是,它还说明了你是否有一个非stanard插件来使用App :: Import()

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

答案 2 :(得分:0)

假设您的供应商文件位于此处/app/vendors/facebook/facebook.php

以下行应该与旧版CakePHP中的App :: import()相同。

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

 $facebookApi = new facebook();