Контроллер обеспечивает связь между приложением, моделями и представлениями: он получает HTTP-запрос и использует модель(и) и соответствующее представление, чтобы создать необходимый HTTP-ответ.
Контроллеры, принадлежащие модулю, обычно находятся в директории 'Controller' в директории модуля с исходным кодом (показано на рисунке 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) и, возможно, другие.
Метод действия | Описание |
---|---|
IndexController::indexAction() |
Действие "index" отображает домашнюю страницу вашего сайта. |
IndexController::aboutAction() |
Действие "about" отображает страницу "About". Она содержит контактную информацию и информацию о авторских правах. |
IndexController::contactUsAction() |
Действие "contactUs" отображает страницу "Contact Us". На этой странице находятся способы связи с авторами сайта. |
Каждый контроллер на вашем сайте наследуется от базового класса AbstractActionController
.
На рисунке 4.4 представлена диаграмма наследования класса.
Класс AbstractActionController
содержит несколько полезных методов, которые вы
можете использовать в своих классах контроллеров. Таблица 4.2 вкратце рассказывает о них:
Имя метода | Описание |
---|---|
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-запросу и ответу, а также доступ к менеджеру событий. Он также дает вам возможность вызывать плагины контроллера (о плагинах контроллера мы узнаем позже в этой главе).