Zend Framework - 控制器

  • 简述

    如前所述,控制器在 Zend MVC 框架中扮演着重要的角色。应用程序中的所有网页都需要由控制器处理。
    在Zend MVC框架中,控制器是实现 - Zend/Stdlib/DispatchableInterface的对象。DispatchableInterface具有一个方法 dispatch,该方法获取 Request 对象作为输入,执行一些逻辑并返回 Response a 对象作为输出。
    
    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 事件管理器)
    • ServiceLocatorAwareInterface − 用于查找服务 (Zend 服务管理器)
    • EventManagerAwareInterface − 用于管理事件 (Zend 事件管理器)
    牢记这些因素,Zend 框架提供了许多现成的控制器来实现这些接口。最重要的控制器如下所述。
  • AbstractActionController

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

    抽象资源管理器((Zend\Mvc\Controller\AbstractConsoleController) 通过考虑 HTTP 方法检查传入请求的 HTTP 方法并匹配操作(方法)
    例如,如果在请求中找到 id 参数,则使用 GET HTTP 方法的请求要么与 getList 方法匹配,要么与 get() 方法匹配。
  • AbstractConsoleController

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