Zend Framework - Контроллеры

Как обсуждалось ранее, controllerиграет важную роль в 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)

Помня об этом, Zend Framework предоставляет множество готовых контроллеров, реализующих эти интерфейсы. Наиболее важные контроллеры описаны ниже.

AbstractActionController

AbstractActionController (Zend / Mvc / Controller / AbstractActionController) является наиболее часто используемым контроллером в Zend MVC Framework. В нем есть все необходимые функции для написания типичной веб-страницы. Он позволяет маршрутам (маршрутизация - это сопоставление URL-адреса запроса с контроллером и одним из его методов) для сопоставленияaction. При совпадении метод, названный в честь действия, будет вызван контроллером.

Например, если маршрут test совпадает и маршрут, test возвращается hello для действий, то helloAction будет вызван метод.

Напишем наш TutorialController используя AbstractActionController.

  • Создайте новый класс 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.

АннотацияRestfulController

AbstractRestfulController (Zend \ Mvc \ Controller \ AbstractRestfulController) проверяет HTTP method входящего запроса и соответствует действию (методу) с учетом методов HTTP

Например, запрос с методом GET HTTP либо соответствует getList() метод или get() метод, если id параметр находится в запросе.

AbstractConsoleController

AbstractConsoleController (Zend \ Mvc \ Controller \ AbstractConsoleController) похож на AbstractActionController, за исключением того, что он работает только в среде консоли, а не в браузере.