Как импортировать файлы поставщиков в CakePHP 3x
Я работаю с недавно выпущенной версией CakePHP 3 (бета 2). Мне нужно интегрировать Facebook Login с помощью PHP SDK, и я не понимаю, как импортировать файлы поставщиков в этой версии.
В CakePHP 2x я использовал
App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php'));
Поэтому мне нужно воспроизвести то же самое в CakePHP 3x (я не использую композитор).
Любая ссылка для этого?
Ответы
Ответ 1
Ну, вам придется загрузить его самостоятельно, если композитор не вариант. Вы всегда можете использовать самый базовый метод 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();
Ответ 2
В cakephp3, чтобы добавить новую библиотеку поставщика, вы можете выполнить следующие шаги:
- Поместите библиотеку в папку
your_project/vendor/
- включить файл библиотеки с помощью
require_once(ROOT . DS . 'vendor' . DS . "my_library_folder" . DS . "my_library_base_class.php")
, это включает в себя код кода библиотеки в нашем коде.
- Включить имя класса в верхней части контроллера, например:
namespace App\Controller;
use MyLibraryBaseClass;
,
он импортирует файл кода библиотеки в нашем пространстве имен, которое будет использоваться.
-
создать объект загруженного класса как
$my_obj= new MyLibraryBaseClass();
Ответ 3
ответ, предоставленный Айманом Б., не похож на выполнение задания, как ожидалось в вопросе, после того, как я попробовал это самостоятельно, по следующим причинам:
- папка поставщика в cakephp3 не находится в папке src в пространстве имен APP, она перемещается в папку ROOT, поскольку вы не сможете загрузить свой класс Facebook, как ожидалось, попробуйте сами, и вы увидите результат...
- Загружая файл поставщика, он автоматически не загружает имя класса, если ваш поставщик lib не следует правилу follwing как правило PSR-0:
\ VENDOR\PACKAGE\TEST.CLASS.PHP и внутри test.class.php нет определения класса, которое должно быть вызвано или импортировано в ваш script с определенным ключевым словом пространства имен в начале этого script следующим образом: пространство имен
то код выше не будет работать.
Чтобы исправить ответ, вы должны сделать несколько шагов следующим образом:
1 - Определите в bootstrap.php новую константу cakephp, например:
define ('VENDOR', ROOT. DS. 'vendor'.DS); поскольку константа VENDOR удаляется в cakephp 3.x, вы можете определить ее самостоятельно
2 - После этого вы должны указать имя поставщика, имя пакета и имя класса в постоянной версии поставщика, например:
define ('_',; и тогда вы можете сделать $facebookApi = new \\();
это будет работать для вас, как и ожидалось в вопросе
Если у вас есть проблемы, попробуйте вернуться ко мне, я покажу вам пример использования, как описано здесь...
Ответ 4
У меня также была та же проблема с CakePHP 3.0.
Сделайте установку в соответствии с инструкциями с помощью Composer.
Затем вам необходимо правильно загрузить плагин в контроллере с помощью инструкции use
. Вот так:
использовать Ghunti\HighchartsPHP\Highchart;
- Если вы используете плагин на большинстве страниц, вместо загрузки в каждый контроллер вы можете добавить одну и ту же строку в файл bootstrap.php прямо под другими операциями использования.
Это решит проблему использования плагина.
Ответ 5
Как и в случае с CakePhp 3.x, рекомендуемым стандартом кода является использование require_once без скобок "()".
require_once (ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph ');
становится
require_once ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph ';
https://book.cakephp.org/3.0/en/contributing/cakephp-coding-conventions.html
Надеюсь, что это поможет кому-то в будущем.