4.3 Controller
- 4.3.1 Создание
- 4.3.2 Базовые методы и свойства
- 4.3.3 Служебные
4.3.1 Создание
Контроллеры располагаются в директории controllers модуля.
Имена контроллеров должны соответствовать следующему соглашению: <Имя_модуля><Имя_контроллера>Controller (todo: описать, откуда берется <Имя_контроллера>, а то не совсем ясно что это за имя).
Например, для модуля news контроллер view будет называться: newsViewController.
Контроллеры в ваших модулях должны наследоваться от базового абстрактного класса simpleController. Каждый контроллер должен реализовывать защищённый (protected) метод getView().
Таким образом, простейшим примером может выступать следующий контроллер, возвращающий клиенту строку Hello, world!:
class helloWorldController extends simpleController { protected function getView() { return 'Hello, world!'; } }
В большинстве случаев вам не придется вручную создавать файлы и базовый код ваших контроллеров. Все эти действия выполнит встроенный в фреймворк инструмент скаффолдинга devToolbar (todo ссылка на тулбар)
4.3.2 Базовые методы и свойства
Для упрощения процесса разработки базовый класс simpleController предоставляет ряд методов и свойств.
Методы:
| Метод | Аргументы | Описание |
|---|---|---|
| setPager |
|
Присоединяет класс пагинации к мапперу, который выбирает данные на страницу. Также в smarty автоматически передаётся инстанция объекта-пейджера с именем $pager (todo ссылка на описание класса), который можно отобразить в произвольном месте.Пример использования: Выберем список новостей, по 10 новостей на странице. И отобразим их в обратном порядке: newsListController.php:
$this->setPager($newsFolderMapper, 10, true); // устанавливаем pager $this->smarty->assign('news', $newsFolderMapper->getItems($newsFolder)); // ищем новости list.tpl:
<div class="pages">{$pager->toString()}</div> |
| fetch |
|
Запуск на исполнение указанного шаблона.
return $this->fetch('news/list.tpl'); |
| redirect |
|
Перенаправление пользователя по указанному урлу. Пример использования: Перенеправление на главную страницу приложения: $url = new url('default'); return $this->redirect($url->get()); |
| forward |
|
Передача управления другому контроллеру. Пример использования: Вызов из текущего контроллера действия dashboard модуля admin:
return $this->forward('admin', 'dashboard'); |
Свойства:
| Свойство | Тип | Описание |
|---|---|---|
| $toolkit | stdToolkit |
Объект toolkit (todo ссылка на описание)
$id = $this->toolkit->getMapper('news', 'news'); |
| $request | httpRequest | Объект запроса (todo ссылка на описание)
$path = $this->request->getString('path'); |
| $response | httpResponse | Объект ответа (todo ссылка на описание)
$this->response->setCookie('cookie_name', 'cookie_data'); |
| $smarty | mzzSmarty | Smarty (подробнее)
$this->smarty->assign('news', $newsFolderMapper->getItems($newsFolder)); $this->smarty->assign('folderPath', $newsFolder->getTreePath()); |
4.3.3 Служебные
-
simple404Controller. Предназначен для вывода стандартной ошибки 404 "Запрашиваемый объект не найден".
Если вам нужно отобразить 404 ошибку у себя в контроллере - следует использовать примерно такой код:Также существует альтернативный способ передачи управления контроллеру 404 ошибки (todo ссылка на описание forward404):$controller = new simple404Controller(); return $controller->run();
В этом случае будет произведён поиск контроллера$mapper = $this->toolkit->getMapper('news', 'news'); ... $this->forward404($mapper);
news404Controllerв директорииnews/controllers. И в случае, если он будет найден - то будет вызван именно он. В противном случае - также будет вызыватьсяsimple404Controller.
В качестве шаблона для этого контроллера используется файлsimple/404.tpl, который вы, конечно же, можете переопределить у себя в проекте (подробнее)
Также он автоматически вызывается для адресов, которые не были обработаны ни одним из роутов. -
simple403Controller. Предназначен для вывода стандартной ошибки 404 "Доступ запрещён".
Если вам нужно отобразить 403 ошибку у себя в контроллере - следует использовать примерно такой код:Также существует альтернативный способ передачи управления контроллеру 403 ошибки (todo ссылка на описание forward403):$controller = new simple403Controller(); return $controller->run();
В этом случае будет произведён поиск контроллера$mapper = $this->toolkit->getMapper('news', 'news'); ... $this->forward403($mapper);
news403Controllerв директорииnews/controllers. И в случае, если он будет найден - то будет вызван именно он. В противном случае - также будет вызыватьсяsimple403Controller.
В качестве шаблона для этого контроллера используется файлsimple/403.tpl, который вы, конечно же, можете переопределить у себя в проекте (подробнее)
Также он автоматически вызывается для адресов, для которых в результате проверки прав достпупа был получен отказ (todo ссылка на роли).