- Zend Framework 教程
- Zend Framework - 首页
- Zend Framework - 简介
- Zend Framework - 安装
- 框架应用程序
- Zend Framework - MVC 架构
- Zend Framework - 概念
- Zend Framework - 服务管理器
- Zend Framework - 事件管理器
- Zend Framework - 模块系统
- 应用程序结构
- Zend Framework - 创建模块
- Zend Framework - 控制器
- Zend Framework - 路由
- Zend Framework - 视图层
- Zend Framework - 布局
- 模型和数据库
- 不同的数据库
- 表单和验证
- Zend Framework - 文件上传
- Zend Framework - Ajax
- Cookie 管理
- 会话管理
- Zend Framework - 身份验证
- 电子邮件管理
- Zend Framework - 单元测试
- Zend Framework - 错误处理
- Zend Framework - 工作示例
- Zend Framework 有用资源
- Zend Framework - 快速指南
- Zend Framework - 有用资源
- Zend Framework - 讨论
Zend Framework - 控制器
如前所述,**控制器**在 Zend MVC 框架中扮演着重要的角色。应用程序中的所有网页都需要由控制器来处理。
在 Zend MVC 框架中,控制器是实现 – Zend/Stdlib/DispatchableInterface 的对象。**DispatchableInterface** 只有一个方法,**dispatch**,它以**请求**对象作为输入,执行一些逻辑并返回**响应**对象作为输出。
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 Framework 提供了许多实现这些接口的现成控制器。最重要的控制器如下所述。
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
AbstractRestfulController(Zend\Mvc\Controller\AbstractRestfulController)检查传入请求的 HTTP**方法**,并通过考虑 HTTP 方法来匹配操作(方法)。
例如,使用 GET HTTP 方法的请求要么匹配**getList()**方法,要么匹配**get()**方法(如果在请求中找到**id**参数)。
AbstractConsoleController
AbstractConsoleController(Zend\Mvc\Controller\AbstractConsoleController)类似于 AbstractActionController,但它只在控制台环境中运行,而不是在浏览器中运行。