Загрузка файлов поставщика в 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");

Кто-нибудь еще находит способ ссылаться на файл поставщика? Из-за ленивой загрузки вышеприведенные методы не вызывают ошибки/предупреждения, поэтому это раздражает, чтобы отладить это...

Ответ 1

Поставщики не могут быть загружены с помощью App::uses() в CakePHP, это связано с тем, что CakePHP не может ожидать, что внешние библиотеки будут следовать тем же стандартам, что и имена папок и файлов. Вы все еще можете использовать App::import('Vendor', ...), как в версии 1.3 фреймворка.

Теперь использование App::import() для поставщиков - это глупо, если вы думаете об этом. Это просто дорогая, многословная и очень глупая обертка для require_once().

В 2.0 мы фактически призываем людей использовать require или require_once для своих библиотек поставщиков. Вы можете получить расположение папки Vendor с помощью App::path('Vendor') или просто APP . 'Vendor' . DS.

Ответ 2

Документация торта предлагает использовать App:: uses() include-files-with-app-import

Однако в нем также указано, есть ли у вас плагин non-stanard для использования App:: Import()

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php'));

Ответ 3

Предположим, что вы находитесь в файле поставщика /app/vendors/facebook/facebook.php здесь.

Следующая строка должна делать то же самое, что и App:: import() в старой версии CakePHP

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

 $facebookApi = new facebook();