Использование App:: использует (вместо App:: import) в плагине CakePHP 2.1

Я пишу небольшое приложение в CakePHP 2.1, и я хочу использовать плагин для загрузки файлов Nick Baker. Я загрузил ветку cakephp2.0 (знаю, что еще не закончен), и поместил ее в папку "Плагины приложений". Я сделал некоторые необходимые изменения, но мне любопытно, как правильно заменить эти вызовы функций App::import (в начале классов FileUploadComponent, FileUploadBehavior и FileUploadHelper) с помощью функции App:uses.

Ему нужно импортировать класс FileUploadSettings из Config/file_upload_settings.php и класса Uploader из Vendor/upload.php. Это можно сделать с помощью функции require_once, но я уверен, что есть способ CakePHP.

Ответ 1

В соответствии с руководством Cake App::import() он сопоставим с тем, как работает require_once(). Насколько я понимаю, вы загружали бы классы с помощью файлов App:uses() и Vendor с помощью App:import().

В документации API говорится следующее по теме:

Все классы, загруженные в прошлом с помощью App::import(‘Core’, $class), должны быть загружены с помощью App::uses(), ссылаясь на правильный пакет. Это изменение обеспечило большую производительность для платформы.

  • Метод больше не ищет рекурсивные классы, он строго использует значения для путей, определенных в App::build()
  • Невозможно загрузить App::import('Component', 'Component') use App::uses('Component', 'Controller');.
  • Использование App::import('Lib', 'CoreClass'); для загрузки основных классов уже невозможно. Импорт несуществующего файла с указанием неправильного типа или имени пакета или null для параметров $name и $file приведет к ложному возврату.
  • App::import('Core', 'CoreClass') больше не поддерживается, используйте App::uses() вместо этого, и пусть автозагрузка остальных классов сделает все остальное.
  • Загрузка файлов поставщика не выглядит рекурсивно в папке поставщиков, она также не будет преобразовывать файл в подчеркнутый, как это было в прошлом.

В руководстве по миграции также есть некоторые вещи, чтобы сказать о App:uses() и является хорошей отправной точкой для сравнения лучших практик для 2.0 с более старыми методами от 1.3 и ниже.

Этот связанный с этим вопрос касается загрузки файлов Vendor в Cake 2.0, я не могу проверить утверждение Хосе Лоренцо о том, что App:import() является "глупой оболочкой" для require_once(), а также утверждение, что это предпочтительный способ включения файлов. Единственное, что я могу найти для последнего, - это стандарты кодирования для вкладчиков Cake, а именно: разработчики вносят вклад в ядро ​​Cake, а не приложения, построенные на основе.

ИЗМЕНИТЬ

Скажем, вы хотите импортировать Twitter OAuth library, находящийся в Vendor/twitter, файл основного класса twitteroauth.php в Vendor/twitter/twitteroauth/twitteroauth.php:

  App::import('Vendor', 'twitteroauth', array('file' => 'twitter'.DS.'twitteroauth'.DS.'twitteroauth.php'));

Ответ 2

Из того, что я собрал:

  • использовать import() для внешних библиотек
  • и uses() для файлов фреймов

Например:

App::import('Vendor', 'ExternalLibrary');
App::uses('Inflector', 'Cake.Utility');