15

我正在使用最近推出的CakePHP 3(beta 2)版本。我需要使用 PHP SDK 集成 Facebook 登录,我不清楚在这个版本中导入供应商文件。
在 CakePHP 2x 中,我使用过

App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php'));

所以我需要在 CakePHP 3x 中重现相同的内容(我没有使用作曲家)。
这有什么参考吗?

4

5 回答 5

24

好吧,如果 composer 不是一个选项,你将不得不自己加载它。您始终可以使用非常基本的 require 方法并自己创建供应商类的新实例。参考:http ://book.cakephp.org/3.0/en/core-libraries/app.html#loading-vendor-files

采用:

 //The following line should do the same like App::import() in the older version of cakePHP
 require_once(ROOT . 'vendor' . DS  . 'Facebook' . DS . 'src' . DS . 'facebook.php');

 $facebookApi = new facebook();
于 2014-10-25T15:34:40.893 回答
20

在 cakephp3 中,要添加新的供应商库,您可以按照以下步骤操作:

  1. 将库文件夹放在your_project/vendor/
  2. 使用包含库文件require_once(ROOT . DS . 'vendor' . DS . "my_library_folder" . DS . "my_library_base_class.php") ,这在我们的代码中包含库代码文件。
  3. 在 Controller 顶部包含类名,例如:

namespace App\Controller; use MyLibraryBaseClass; ,

这会在我们的命名空间中导入要使用的库代码文件。

  1. 将加载类的对象创建为

    $my_obj= new MyLibraryBaseClass();

于 2015-07-07T16:21:03.987 回答
2

在我自己尝试之后,Ayman B. 提供的答案看起来不像问题中预期的那样工作,原因如下:

  • cakephp3 中的 vendor 文件夹不在 APP 命名空间下的 src 文件夹中,它被移动到 ROOT 文件夹,这样做你将无法按预期加载你的 Facebook 类,你自己试试,你会看到结果...
  • 通过加载供应商文件,这不会自动加载类名本身,如果您的供应商库不遵循 PSR-0 规则的以下规则:\VENDOR\PACKAGE\TEST.CLASS.PHP 和 test.class.php没有必须在脚本中调用或导入的类定义,并在此脚本的开头使用定义的命名空间关键字,如下所示:命名空间,则上面的代码将不起作用

要更正答案,您必须执行以下几个步骤:

1 - 在 bootstrap.php 中定义一个新的 cakephp 常量,如下所示:define('VENDOR',ROOT . DS . 'vendor' .DS); 由于在 cakephp 3.x 中删除了 VENDOR 常量,您可以自己定义它 2 - 之后,您必须在供应商常量中指定供应商名称、包名称和类名称,例如:define('_',; 然后你可以做 $facebookApi = new \\();

这将按问题中的预期为您工作

如果您有问题请尝试回复我,我将向您展示此处所述的使用示例...

于 2015-04-07T10:47:11.797 回答
1

CakePHP 3.0 也有同样的问题。

使用 Composer 按照说明进行安装。

然后您必须使用该use语句在控制器中正确加载插件。像这样:

使用 Ghunti\HighchartsPHP\Highchart;

  • 如果您在大多数页面中使用插件,而不是在每个控制器中加载,您可以在bootstrap.php文件中添加相同的行,就在其他使用语句的下方。

这将解决使用插件的问题。

于 2015-12-12T13:09:33.293 回答
0

从 CakePhp 3.x 开始,推荐的代码标准是使用不带括号“()”的 require_once。

require_once(ROOT.'文件夹'.DIRECTORY_SEPARATOR.'requiredfile.ph');

变成

require_once ROOT.'文件夹'.DIRECTORY_SEPARATOR.'requiredfile.ph';

https://book.cakephp.org/3.0/en/contributing/cakephp-coding-conventions.html

希望对将来的人有所帮助。

于 2017-03-26T22:15:06.080 回答