我目前正在将其中一个项目升级到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.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");
有没有人找到引用供应商文件的方法?由于延迟加载,上面的方法不会触发错误/警告,所以调试它有点烦人......
答案 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();