A free and open-source book on ZF3 for beginners


4.3. Контроллеры

Контроллер обеспечивает связь между приложением, моделями и представлениями: он получает HTTP-запрос и использует модель(и) и соответствующее представление, чтобы создать необходимый HTTP-ответ.

Контроллеры, принадлежащие модулю, обычно находятся в директории 'Controller' в директории модуля с исходным кодом (показано на рисунке 4.3)

Рисунок 4.3. Директория контроллеров Рисунок 4.3. Директория контроллеров

Скелетное приложение снабдит вас стандартной реализацией класса контроллера IndexController. IndexController - это, как правило, главный класс контроллера вебсайта. Его код представлен ниже (некоторые куски кода пропущены для упрощения)

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

Из примера выше вы видите, что контроллеры обычно определяют свое собственное пространство имен (строка 2). IndexController, как все другие контроллеры модуля Application, существует в пространстве имен Application\Controller.

Контроллер - это обычный PHP-класс, наследуемый от базового класса AbstractActionController (строка 7).

По умолчанию класс контроллера содержит один метод действия, называемый indexAction() (см. строки 9-12). Обычно вы будете создавать другие методы действия в ваших классах контроллеров.

ZF3 автоматически распознает методы действия по суффиксу 'Action'. Если название метода у контроллера не имеет этого суффикса, он считается обычным методом, не методом действия.

Как следует из его имени, метод действия делает некоторые действия с сайтом, которые, как правило, заканчиваются созданием одной веб-страницы. Контроллер IndexController обычно содержит методы действий, которые можно отести ко всему сайту (таблица 4.1). Например, у вас будет действие "index" для Главной (Home) страницы, действие "about" для страницы About, действие "contactUs" для страницы Свяжитесь с нами (Contact Us) и, возможно, другие.

Таблица 4.1. Типичные действия Index-контроллера
Метод действия Описание
IndexController::indexAction() Действие "index" отображает домашнюю страницу вашего сайта.
IndexController::aboutAction() Действие "about" отображает страницу "About". Она содержит контактную информацию и информацию о авторских правах.
IndexController::contactUsAction() Действие "contactUs" отображает страницу "Contact Us". На этой странице находятся способы связи с авторами сайта.

4.3.1. Класс базового контроллера

Каждый контроллер на вашем сайте наследуется от базового класса AbstractActionController. На рисунке 4.4 представлена диаграмма наследования класса.

Рисунок 4.4. Диаграмма наследования класса Рисунок 4.4. Диаграмма наследования класса

Класс AbstractActionController содержит несколько полезных методов, которые вы можете использовать в своих классах контроллеров. Таблица 4.2 вкратце рассказывает о них:

Таблица 4.2. Полезные методы AbstractActionController
Имя метода Описание
getRequest() Возвращает объект Zend\Http\Request, который является представлением данных HTTP-запроса.
getResponse() Возвращает объект Zend\Http\PhpEnvironment\Response, что позволяет установить данные HTTP-ответа.
getEventManager() Возвращает объект Zend\EventManager\EventManager, что позволяет вызвать и обработать событие.
getEvent() Возвращает объект Zend\Mvc\MvcEvent object, который представляет событие, на которое отвечает контроллер.
getPluginManager() Возвращает объект Zend\Mvc\Controller\PluginManager, который можно использовать для плагинов контроллера.
plugin($name, $options) Этот метод позволяет обращаться к определенному плагину контроллера, по заданному имени.
__call($method, $params) Позволяет вызвать плагин контроллера, используя магический PHP-метод __call.

Как вы видите из таблицы приведенной выше, базовый класс контроллера позволяет вам получить доступ к HTTP-запросу и ответу, а также доступ к менеджеру событий. Он также дает вам возможность вызывать плагины контроллера (о плагинах контроллера мы узнаем позже в этой главе).


Top