Использование App :: использует (вместо App :: import) в плагине CakePHP 2.1 - PullRequest
10 голосов
/ 25 января 2012

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

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

Ответы [ 2 ]

28 голосов
/ 03 января 2013

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

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

Например:

App::import('Vendor', 'ExternalLibrary');
App::uses('Inflector', 'Cake.Utility');
11 голосов
/ 25 января 2012

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

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

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

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

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

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

EDIT

Допустим, вы хотите импортировать библиотеку OAuth Twitter ,находится в Vendor/twitter, файл основного класса - twitteroauth.php в Vendor/twitter/twitteroauth/twitteroauth.php:

  App::import('Vendor', 'twitteroauth', array('file' => 'twitter'.DS.'twitteroauth'.DS.'twitteroauth.php'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...