如何在CakePHP 3x中导入供应商文件



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

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

所以我需要在CakePHP 3x中复制相同的内容(我没有使用composer)
有参考资料吗?

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

用途:

 //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();

在cakephp3中,要添加新的供应商库,可以执行以下步骤:

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

namespace AppController; use MyLibraryBaseClass;

这将导入要使用的命名空间中的库代码文件。

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

    $my_obj= new MyLibraryBaseClass();

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

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

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

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

正如问题中所期望的那样,这将对您有效

如果你有问题,试着回复我,我会给你看一个这里描述的使用示例。。。

我在CakePHP 3.0中也遇到了同样的问题。

按照指示使用Composer进行安装。

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

使用Ghunti\HighchartsHP\Highchart

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

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

从CakePhp 3.x开始,推荐的代码标准是使用不带括号的require_one。

require_one(ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph');

成为

require_one ROOT。'文件夹'.DIRECTORY_SEPARATOR.'必选文件.ph';

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

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

最新更新