Пример создания простого приложения в Kohana framework. Часть 2

Немного информации

В прошлый раз я закончил на настройке маршрутизации для этого примера.
Сейчас я рассмотрю контроллеры, виды и модели. Для видов не буду рассматривать шаблонизаторы. Во-первых, нет времени. Во-вторых, php сам по себе неплохой шаблонизатор.

Контроллеры

Если хочется узнать что такое контроллер и вообще mvc, то в интернете множество ресурсов с информацией на данную тему. Для текущего случая контроллер – класс, котоый принимает запрос – кохана решает какой класс и какой метод класса (action) вызывать согласно правилам найденного маршрута. Далее уже в результате работы метода будет или не будет выведен какой-то результат.

Еще небольшое уточнение о роутинге/маршрутизации. Схема url для маршрутизации – это своеобразный api для связи фронтенда и бэкенда. Если смотреть на планировние схем url с этой точки зрения, то и подход должен быть достаточно ответственный.

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

  • отправить запрос на вывод формы группы
  • заполнить информацию – название, описание
  • отправить запрос с данными формы

т.е. 2 запроса: group/add для вывода пустой формы и group/save для отправки данных формы.

если нужно добавить группу, то схема урл может быть такая /group/addnew – для вывода формы и /group/save/
Но в данном случае все довольно просто, поэтому будет использоваться только один контроллер.

Все контроллеры в Кохане располагаются в каталоге classes/Controller (про структуру каталогов фреймворка можно почитать в документации на официальном сайте)

Именование класса контроллера выглядит следующим образом:

public class Controller_Аdmin extends Controller { ... }

Модификатор public можно опустить. Префикс Controller_ соответствует правилам поиска файлов фреймворка – перечисление каталогов относительно каталога classes (своеобразный аналог нейспейсов или пакетов). Например, для контроллера Controller/Front/Main.php имя класса будет Controller_Front_Main. Admin – должно точно соответствовать имени файла Admin.php (в 3-й кохане перешли на использование имен файлов классов с прописным первым символом)

request и response

В контроллере реализованы два объекта, которые непосредственно учавствуют в жизненном цикле – это запрос (request) и ответ (response).
Причем, если смотреть на реализацию именно Request отвечает за вызов контроллера и в $this->request ссылка на вызвавший текущий контроллер запрос. Чаще всего для девелопера запрос используется для получение параметров и имен экшенов.

Переменная $this->response ссылается на объект ответа. В обычном контроллере параметром метода $this->response->body() устанавливается то, что будет отправлено в ответ на запрос. А методом $this->response->headers() можно получить или установить http заголовки.

Контроллер и темплейт-контроллер

В кохане есть 2 класса для расширения и реализации своих контроллеров – простой контроллер (system/classes/Controller.php) и темплейт-контроллер (system/classes/Controller/Template.php). Разница, в основном, состоит в том, что после отработки темплейт-контроллера производится вывод в любом случае.

Выводом в темплейт-контроллере управляют 2 параметра:
Первый, опеределяет имя представления, которе будет использоваться для автоматического рендеринга.
Этот параметр задается в своем контроллере, наследующем от темплейт-контроллера и в before методе темплейт-контроллера создается объект представления:

public $template = 'view_name';//имя представления, которое будет автоматически использоваться для рендеринг

Второй параметр, используется как флаг для создания объекта представления и последущего рендеринга

public $auto_render = true; //по умолчанию авторендеринг включен

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

$this->response->body(View::factory('some_view'));

Экшены

В терминологии фреймворка экшены – это конечные точки маршрутизации. Это такие методы в контроллере, которые вызываются в результате запроса.

В простом случае, как в этом примере, когда используется маршрут по-умолчанию ссылка вида

http://site.addr/admin/deleterole/4

то маршрутизация по-умолчанию создаст объект класса Controller_Аdmin и вызовет публичный метод action_deleterole. Параметр со значением 4 будет доступен из контроллера через request: $this->request->params(‘id’);

Следует обратить внимание, что в 3.3 уже не нужно писать параметры для экшенов, т.е. для приведенной выше ссылки
public function action_delete($id) { … } не будет найдена

Таким образом с точки зрения класса контроллера экшены это публичные методы с префиксом action_. Если не будет метода action_deleterole или вместо deleterole в ссылке будет, например, опечатка, то в результате окажется ошибка 404

Примечание: в эту часть позже будет добавлен разбор кода для приложения.

Первая часть

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *