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