Структура CakePHP
CakePHP имеет не только классы работы с Контроллером, Моделью и Отображением, но также и некоторые дополнительные классы и объекты, которые делают создание приложений в архитектуре MVC более быстрым и приятным. Компоненты, Поведения и Помощники являются классами, которые расширяют основные, служат для множественного использования и быстро добавляют функциональность к базовым классам MVC в приложениях. Сейчас мы работаем только с основными классами, поэтому узнаем как использовать дополнительные несколько позже.
Расширение Контроллера
Компоненты предоставляют вспомогательные средства Контроллерам. Если у вас есть участки логики, которые используются несколькими Контроллерами, то Компонент — это то, что вам поможет. Например Компонент EmailComponent создает и отправляет письмо. Эта функциональность может потребоваться несколько раз в приложении. Поэтому целесообразно держать логику создания и отправки письма в Компоненте, который можно подключить в любой контроллер.
Контроллеры также снабжены функциями обратного вызова. Эти функции полезны в том случае, если вам необходимо вставить какую-то логику между основными действиями Контроллера. Существуют следующие функции:
- beforeFilter(), выполняется перед вызовом любого действия Контроллера.
- beforeRender(), вызывается после действия, но перед созданием Отображения.
- afterFilter(), выполняется после всей логики контроллера (в том числе и создания Отображения). Может не иметь никаких отличий от вызова beforeRender(), если вы вручную вызывали функцию render() в действии вашего Контроллера и выполняли некоторую логику после этого.
Расширение Отображения
Помощник (Helper) — это класс, который расширяет возможности Отображения. Это что-то вроде Компонента в Контроллерах, но только для раширения возможностей Отображения. Например Помощник AjaxHelper помогает сделать Ajax запросы в отображениях максимально простыми.
Большинство приложений имеют куски кода, которые используются неоднократно. CakePHP помогает при повторном отображении кусков кода при помощи Разметки (Layout) и Элементов. По умолчанию, каждое готовое Отображение помещается в единую разметку (самый общий дизайн). Элементы же используются когда необходимо несколько раз использовать небольшой кусок в нескольких Отображениях.
Расширение Модели
Расширения, которые позволяют выносить участки кода из Модели, называются Поведениями (Behavior). Например, если вы храните информацию о пользователе в древовидной структуре, то можете выделить пользовательскую Модель в Поведение и получить простую функциональность по добавлению, удалению или редактированию узлов этого дерева.
Модели также поддерживают другой класс под названием DataSource. DataSources — это абстракция модели, которая позволяет манипулировать различными типами данных. Хотя обычно с Моделью работают, как с базой данных, вам ничего не стоит написать DataSource, чтобы работать с Моделью, как с RSS-потоком, CSV файлами, записями LDAP или событиями iCal. DataSources позволяет вам связать записи различных источников, а не только подсоединяться при помощи SQL. Например, вы можете указать, что ваша LDAP Модель связана с несколькими iCal записями.
Как и Контроллеры, Модели предоставляют некоторые функции обратного вызова:
- beforeFind()
- afterFind()
- beforeValidate()
- beforeSave()
- afterSave()
- beforeDelete()
- afterDelete()
По именам этих функций должно быть понятно когда они вызываются. Обязательно прочитайте о них подробнее в главе о Моделях.
Расширение Приложения
Вы можете определить расширения для Контроллеров, Моделей и Отображений заранее для всех действий системы. AppController (располагается в
/app/app_controller.php), AppHelper (располагается в
/app/app_helper.php) и AppModel (располагается в
/app/app_model.php) — это классы в которых вы можете определить Компоненты, Помощники и Поведения, которые будут доступны по всей системе.
Cake считает, что URL, введенный вами, указывает на метод контроллера и передает ему параметры. Например URL
«/controller/action/var1/var2» вызывает
Controller::action($var1, $var2). Но вы можете поменять эту логику при помощи Роутов.
Некоторые возможности вашего приложения могут быть достойны вынесения в отдельные программы. Плагин — это пакет Моделей, Контроллеров и Отображений для достижения определенной цели, который может подключаться сразу к нескольким приложениям. Например Система управления пользователями или Система блога могут быть универсальными и подключаться на несколько сайтов одновременно.
<< Понимание архитектуры MVC |
Файловая структура >>