freedev.asia Свободное програмное обеспечение, для свободных людей!

26Май/100

CakePHP — Структура плагина или как создать свой первый плагин

В последнее время мне все больше и плотнее приходится работать с фреймворком cakePHP. И с каждым разом он не перестает удивлять своей замечательной подборкой модулей и возможностью расширений.

В этот раз меня привлекло использование плагинов, которые достаточно универсальны и просты в написании и использовании. И что самое главное - плагин может использоваться многократно в разных проектах. Можно сказать что это и есть удобство хранения и переноса ваших модулей.

Использовать плагины можно в различных комбинациях. Плагин - это как мини-приложение в вашем проекте. Он связан с ним только конфигурационными файлами - соединение с БД database.ctp и настройка роутов routers.ctp, которые при желании можно же конечно переопределить в самом плагине .. ;) Вот примерно такая типовая структура будет у всех плагинов, за исключением ненужных модулей.

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

Базовая структура плагина

Именование и размещение

Очень важный момент - это как назвать файлы. Для структуры плагина определены четкие правила в именовании файлов для предотвращения возникновения конфликтных ситуаций в приложении.

Для того, чтобы подключить плагин в свое приложение, его достаточно положить в специальную папку /app/plugins. CakePHP автоматически просматривая папки при загрузке подключит ваш плагин к приложению.

Тогда expample и будет названием вашего плагина.  Желательно, для вашего же удобства (!)придерживаться этого названия при создании файлов и программного кода в них, и даже таблиц, если таковые Вы собираетесь использовать.

Плагин App Controller и App Model

Для того чтобы определять настройки, которые вы обычно делаете в app_controller.php и app_model.php в плагине используються специальные файлы example_app_controller.php и example_app_model.php

  • Файл - plugin_app_controller.php
  • Класс - PluginAppController
  • Родительский класс - AppController
class ExampleAppController extends AppController {
/*
* необходимый код, что для контроллера плагина
*/
}
  • Файл - plugin_app_model.php
  • Класс - PluginAppModel
  • Родительский класс - AppModel
class ExampleApModel extends AppModel {
/*
* необходимый код, что для модели плагина
*/
}

Использование из приложения: router, models, element, link и другое

Чтобы обратиться к плагину, достаточно пройти по ссылке вида

/*
* определение ссылки методом cakePHP
*/
echo $html->link('Plugin Example', array( 'plugin' => 'example', 'controller' => 'manage_ example', 'action' => 'display', ));</div>

или ввести в адресной строке браузера http://your.website.name/example/manage_example/display/

Чтобы привести ссылку к виду, который устраивает Вас, как разработчика, или же -  "Во исполнение желания заказчика", воспользуйтесь возможностью переопределения роутов:

/*
* переход к отображению, которое запуститься только в том случае,
* если вы заете его название, иначе сработает следующий после него роут
*/
Router::connect('/example/onlyme/*', array('plugin'=>'example', 'controller' => 'manage_example', 'action' => 'onlyme'));
/*
* переход к основному отображению, независимо от того,
* какие параметры будут переданы после указания example, в том числе
* если первым параметром вы неправильно напишете onlyme
*/
Router::connect('/example/*', array('plugin'=>'example', 'controller' => 'manage_example', 'action' => 'display'));

Для использования элемента (/plugin/views/elements/element.ctp) из плагина, необходимо использовать конструкцию указанную ниже.

  • element - название элемента
  • example - название плагина
  • option, other_option - параметры, которые принимает элемент
/*

* вызов элемента из плагина методом cakePHP
*/
<?php echo $this->element('element', array('plugin'=>'example', 'option'=>'value', 'other_option'=>value)); ?>

Модели, behavier из плагина можно использовать в любом месте вашего приложения, для этого достаточно при подключении написать сначала название плагина, а затем указать модель:

<?php
/*
* подключение модедей из плагина в ваше приложение
*/
class MyController extends AppController{
// ......
// ваши настройки
uses = array('Example.Example');  // подключаем модель из плагина
} ?>
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

Нет обратных ссылок на эту запись.