35

我目前正在将我们的一个项目升级到 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");

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

4

3 回答 3

54

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

现在,App::import()如果您考虑一下,将其用于供应商有点愚蠢。它只是一个昂贵、冗长且非常愚蠢的require_once().

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

于 2011-11-16T20:33:11.350 回答
1

Cake documentation suggest using App::uses() including-files-with-app-import

However, it also states if you have a non-stanard plugin to use App::Import()

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php'));
于 2016-08-25T21:36:56.583 回答
1

Assume you'r vendor file located /app/vendors/facebook/facebook.php here.

The following line should do the same like App:: import() in the older version of CakePHP

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

 $facebookApi = new facebook();
于 2017-01-26T16:06:34.710 回答