Стандартный запрос CakePHP
Мы рассмотрели основные составляющие CakePHP, давайте теперь посмотрим, как каждый ингредиент взаимодействует с системой чтобы выполнить самый базовый запрос. А рассматривать будем, продолжая простой пример, когда пользователь Иван нажимает на ссылку Buy A Custom Cake Now!, которая ведет на страницу, генерируемую CakePHP.
Изображение 2: Типичный запрос CakePHP
- Черный — обязательные элементы
- Серый — не обязательные
- Голубой — функции обратного вызова
- Иван нажал на ссылку http://www.example.com/cakes/buy, и его браузер делает запрос к серверу.
- Маршрутизатор (будем иногда так называть Роуты) разбивает адрес на части, выявляя Контроллер, действие и прочие элементы, которые могут повлиять на бизнес-логику.
- Используя Роут запрос браузера переадресуется к действию Контроллера (на самом деле это просто метод в классе Контроллера). В этом случае это метод buy() класса CakesController. Но до того как выполнить метод buy(), обязательно выполнится функция обратного вызова beforeFilter(), объявленная в этом классе.
- Контроллер воспользуется Моделью для получения данных (как правило из базы данных). В данном случае Модель используется для того, чтобы получить из базы данных информацию о последней покупке Ивана. Любые объявленные функции обратного вызова, Поведения и базы данных могут использоваться для выполнения этого запроса. Хотя в другом случае Модель может и не понадобиться, но CakePHP требует чтобы для каждого контроллера была объявлена Модель.
- После получения данных, они возвращаются в Контроллер. При этом выполняются функции обратного вызова Модели.
- Контроллер может использовать Компоненты для уточнения данных и выполнять другие операции (манипулировать сессиями, аутентификацией, или, например, отправлять сообщения по электронной почте).
- Когда Контроллер при помощи Модели и Компонентов выполнил все необходимые операции, он может передать полученные данные в Отображение при помощи функции set(). Функции обратного вызова применяются до отправки информации в Отображение. Выполняется логика Отображения, при этом могут использоваться Элементы и/или Помощники. По умолчанию результат отображения выводится в Разметке.
- При этом могут быть применены функции обратного вызова (afterFilter()). Полностью собранная страница отправляется в браузер Ивана.