Как обсуждалось ранее, контроллер играет важную роль в Zend MVC Framework. Все веб-страницы в приложении должны обрабатываться контроллером.
В Zend MVC Framework контроллеры — это объекты, реализующие — Zend / Stdlib / DispatchableInterface. DispatchableInterface имеет единственный метод dispatch , который получает объект Request в качестве входных данных, выполняет некоторую логику и возвращает Response объект в качестве выходных данных.
dispatch(Request $request, Response $response = null)
Простой пример объекта Controller для возврата «Hello World» выглядит следующим образом:
use Zend\Stdlib\DispatchableInterface; use Zend\Stdlib\RequestInterface as Request; use Zend\Stdlib\ResponseInterface as Response; class HelloWorld implements DispatchableInterface { public function dispatch(Request $request, Response $response = null) { $response->setContent("Hello World!"); } }
DispatchableInterface является базовым и требует много других интерфейсов для написания контроллеров высокого уровня. Некоторые из таких интерфейсов следующие:
-
InjectApplicationEventInterface — используется для внедрения событий (Zend EventManager)
-
ServiceLocatorAwareInterface — используется для поиска сервисов (Zend ServiceManager)
-
EventManagerAwareInterface — используется для управления событиями (Zend EventManager)
InjectApplicationEventInterface — используется для внедрения событий (Zend EventManager)
ServiceLocatorAwareInterface — используется для поиска сервисов (Zend ServiceManager)
EventManagerAwareInterface — используется для управления событиями (Zend EventManager)
Помня об этом, Zend Framework предоставляет множество готовых контроллеров, реализующих эти интерфейсы. Наиболее важные контроллеры описаны ниже.
AbstractActionController
AbstractActionController (Zend / Mvc / Controller / AbstractActionController) является наиболее часто используемым контроллером в Zend MVC Framework. Он имеет все необходимые функции для написания типичной веб-страницы. Это позволяет маршрутам (маршрутизация соответствует URL-адресу запроса к контроллеру и одному из его методов), чтобы соответствовать действию . При совпадении метод, названный в честь действия, будет вызываться контроллером.
Например, если сопоставлен тест маршрута и маршрут возвращает тест hello for action, будет вызван метод helloAction .
Давайте напишем наш TutorialController, используя AbstractActionController .
-
Создайте новый класс PHP с именем TutorialController , расширив AbstractActionController и поместите его в каталог module / Tutorial / src / Controller / .
-
Установите Tutorial \ Controller в качестве пространства имен.
-
Напишите метод indexAction .
-
Вернуть объект ViewModel из метода indexAction . Объект ViewModel используется для отправки данных из контроллера для просмотра движка, что мы увидим в следующих главах.
Создайте новый класс PHP с именем TutorialController , расширив AbstractActionController и поместите его в каталог module / Tutorial / src / Controller / .
Установите Tutorial \ Controller в качестве пространства имен.
Напишите метод indexAction .
Вернуть объект ViewModel из метода indexAction . Объект ViewModel используется для отправки данных из контроллера для просмотра движка, что мы увидим в следующих главах.
Полный список кодов выглядит следующим образом —
?php namespace Tutorial\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class TutorialController extends AbstractActionController { public function indexAction() { return new ViewModel(); } }
Мы успешно добавили новый TutorialController .
AbstractRestfulController
AbstractRestfulController (Zend \ Mvc \ Controller \ AbstractRestfulController) проверяет метод HTTP входящего запроса и сопоставляет действие (метод) с учетом методов HTTP
Например, запрос с методом GET HTTP либо совпадает с методом getList () или методом get () , если в запросе найден параметр id .
AbstractConsoleController
AbstractConsoleController (Zend \ Mvc \ Controller \ AbstractConsoleController) похож на AbstractActionController за исключением того, что он работает только в среде консоли, а не в браузере.