Zend 框架 - 控制器


如前所述,控制器在 Zend MVC 框架中发挥着重要作用。应用程序中的所有网页都需要由控制器来处理。

在 Zend MVC 框架中,控制器是实现 Zend/Stdlib/DispatchableInterface 的对象。DispatchableInterface有一个方法:dispatch ,获取Request对象作为输入,执行一些逻辑并返回Response对象作为输出。

dispatch(Request $request, Response $response = null) 

返回“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 (Zend/Mvc/Controller/AbstractActionController) 是 Zend MVC 框架中最常用的控制器。它具有编写典型网页所需的所有功能。它允许路由(路由将请求 url 匹配到控制器及其方法之一)来匹配操作。当匹配时,控制器将调用以该操作命名的方法。

例如,如果匹配了路由test并且路由test返回hello for action,则将调用helloAction方法。

让我们使用AbstractActionController编写TutorialController

  • 通过扩展AbstractActionController创建一个名为TutorialController的新 PHP 类,并将其放置在module/Tutorial/src/Controller/目录中。

  • Tutorial\Controller设置为命名空间。

  • 编写一个indexAction方法。

  • indexAction方法返回ViewModel对象。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

The AbstractRestfulController (Zend\Mvc\Controller\AbstractRestfulController) inspects the HTTP method of the incoming request and matches the action (method) by considering the HTTP methods

For example, the request with GET HTTP method either matches the getList() method or the get() method, if the id parameter is found in the request.

AbstractConsoleController

The AbstractConsoleController (Zend\Mvc\Controller\AbstractConsoleController) is like the AbstractActionController except that it only runs in the console environment instead of a browser.