В настоящее время я обновляю один из наших проектов до 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");
Кто-нибудь еще находит способ ссылаться на файл поставщика? Из-за ленивой загрузки вышеописанные методы не запускают ошибку / предупреждение, поэтому отвратительно отлаживать это …
Поставщики не могут быть загружены с помощью 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
APP . 'Vendor' . DS
APP . 'Vendor' . DS
.
Документация торта предлагает использовать App :: uses () include-files-with-app-import
Однако в нем также указано, есть ли у вас плагин non-stanard для использования App :: Import ()
App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php'));
Предположим, что вы находитесь в файле поставщика /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();