在CakePHP 2.0中加载供应商文件

Joh*_* N. 34 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中: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");
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*uez 53

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

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

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

  • 因此,App :: import("供应商","Facebook/Facebook")应该可以解决您的问题. (4认同)
  • 顺便说一下,你展示它的旧App :: import()用法是行不通的,因为你需要提供类的相对路径.由于性能原因,import()不再以递归方式查看目录.我听说过有关它的报道,但在问题跟踪器中没有打开门票.但是,该功能的单元测试都按预期通过.我将尝试编写一个真实的示例来实际验证它是否按预期工作.谢谢! (2认同)