MZZ.Framework 0.3.x: Документация
Разделы

3.2 Контроллеры

1. simpleController
2. simple403Controller
3. simple404Controller
4. messageController
5. Передача управления другому контроллеру
6. Переадресация
1. simpleController

Базовый контроллер, от которого наследуются все контроллеры приложения. При создании объекта этого класса в защищённые (protected) свойства инициализируется ряд системных объектов, необходимых для работы конечных контроллеров.

2. simple403Controller

Данный контроллер запускается в случае, когда не хватает прав доступа на запуск действия. К моменту написания главы его реализация выглядела следующим образом:

<?php
 
class simple403Controller extends simpleController
{
    public function getView()
    {
        $module = 'page';
        $action = 'view';
        $name = '403';
 
        if ($this->request->getModule() == $module
        && $this->request->getString('name') == $name
        && $this->request->getAction() == $action) {
            throw new mzzRuntimeException('Recursion detected: the 403 controller was called twice.');
        }
 
        $header = $this->request->getBoolean('403header');
        $this->request->setModule($module);
        $this->request->setParams(array('name' => $name));
        $this->request->setAction($action);
 
        if ($header) {
            $this->response->setStatus(403);
        }
 
        return $this->forward($module, $action);
    }
}
 
?>

Как видно из кода, устанавливались значения, обеспечивающие запуск страницы 403 вместо вызываемого модуля. А также отправка соответствующих заголовков пользователю.

3. simple404Controller

Данный контроллер запускается в случае, когда запрашиваемый объект не найден:

<?php
class simple404Controller extends simpleController
{
    /**
     * Свойство, определяющее - отправлять контент или только заголовки
     *
     * @var boolean
     */
    protected $onlyHeaders;
 
    /**
     * Результат работы контроллера, обрабатывающего 404 ошибку конкретных ДО
     *
     * @var string
     */
    private $result;
 
    /**
     * Конструктор
     *
     * @param boolean $onlyHeaders
     */
    public function __construct($onlyHeaders = false)
    {
        parent::__construct();
        $this->onlyHeaders = (bool)$onlyHeaders;
    }
 
    /**
     * Установка результата работы 404 контроллера для определенного маппера
     *
     * @param simpleMapper $mapper
     */
    public function applyMapper(mapper $mapper)
    {
        $this->result = $this->forward404($mapper);
    }
 
    protected function getView()
    {
        $this->response->setStatus(404);
 
        if ($this->result) {
            return $this->result;
        }
 
        $module = 'page';
        $action = 'view';
        $name = '404';
 
        if ($this->request->getModule() == $module && $this->request->getString('name') == $name && $this->request->getAction() == $action) {
            throw new mzzRuntimeException('Recursion detected: the 404 controller was called twice.');
        }
 
        $this->request->setModule($module);
        $this->request->setParams(array('name' => $name));
        $this->request->setAction($action);
 
        return $this->onlyHeaders ? false : $this->forward($module, $action);
    }
}
 
?>

Как видно из кода, устанавливались значения, обеспечивающие запуск страницы 404 вместо вызываемого модуля. А также отправка соответствующих заголовков пользователю.

4. messageController

Контроллер, используемый для различных информационных сообщений и предупреждений. Типичный пример использования данного контроллера:

$controller = new messageController('Запрашиваемая новость не найдена', messageController::INFO);
return $controller->run();

Вторым аргументом может быть передан тип выводимого сообщения. По умолчанию messageController::WARNING.
Доступны следующие типы:

5. Передача управления другому контроллеру

В случае необходимости существует возможность из текущего контроллера передать управление другому контроллеру. Запуск действия list модуля news будет выглядеть так:

$this->forward('news', 'list');

Также предусмотрен метод для передачи управления в случае необходимости вывода ошибки 404 (объект не найден). Вызов этого метода будет выглядеть так:

$this->forward404($newsMapper);

Аргумент $newsMapper необязательный, но он определяет класс, при поиске объекта которого была получена данная ошибка. Если для этого класса определён свой контроллер-обработчик, то будет вызван именно он. В противном случае - simple404Controller. Аналогичным методом передаётся управление через метод forward403.

6. Переадресация

Переадресация в контроллерах осуществляется с помощью метода redirect:

$this->redirect($url); // в переменной $url хранится адрес, на который нужно перейти