Zend Framework - 控制器

如前所述,控制器在 Zend MVC 框架中扮演着重要的角色。应用程序中的所有网页都需要由控制器处理。

在 Zend MVC 框架中,控制器是实现 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 框架中最常用的控制器。它具有编写典型网页所需的所有功能。它允许路由(路由是将请求 URL 匹配到控制器及其方法之一)匹配 action。匹配后,控制器将调用以操作命名的方法。

例如,如果路由 test 匹配,并且路由 test 返回 hello 作为操作,则将调用 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

AbstractRestfulController

AbstractRestfulController (Zend\Mvc\Controller\AbstractRestfulController) 检查传入请求的 HTTP 方法,并通过考虑 HTTP 方法来匹配操作(方法)

例如,如果在请求中找到 id 参数,则带有 GET HTTP 方法的请求将匹配 getList() 方法或 get() 方法。

AbstractConsoleController

AbstractConsoleController (Zend\Mvc\Controller\AbstractConsoleController) 与 AbstractActionController 类似,只是它仅在控制台环境中运行,而不是在浏览器中运行。