Учебники

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

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