上一篇Blog记录了通过Controller Plugin根据HTTP ACCEPT选择性地出现不同的模板,RESTful API是通过HTTP METHOD(GET, POST, PUT, DELETE等)来选择执行不同的动作。同样通过Plugin可以将不同的HTTP METHOD分派给不同的Action来处理。修改后的Plugin如下:
<?php
/**
* Choose correct view for RESTful client
*
* @author lht
* @version
*/
final class Restful extends Zend_Controller_Plugin_Abstract {
protected function adjustAction(Zend_Controller_Request_Abstract $request) {
if ($request->getMethod() == "GET") {
$request->setActionName("get");
}elseif ($request->getMethod() == "POST") {
$request->setActionName("post");
}elseif ($request->getMethod() == "PUT") {
$request->setActionName("put");;
}elseif ($request->getMethod() == "DELETE") {
$request->setActionName("delete");;
}
}
protected function adjustView(Zend_Controller_Request_Abstract $request) {
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
if (preg_match('/text\/xml/i', $request->getHeader('Accept'))) {
$this->getResponse()->setHeader('Content-Type', 'text/xml; charset=utf-8');
$viewRenderer->setViewSuffix('pxml');
} elseif (preg_match('/application\/json/i', $request->getHeader('Accept'))) {
$this->getResponse()->setHeader('Content-Type', 'application/json; charset=utf-8');
$viewRenderer->setViewSuffix('pjson');
} elseif (preg_match('/text\/plain/i', $request->getHeader('Accept'))) {
$this->getResponse()->setHeader('Content-Type', 'text/plain; charset=utf-8');
$viewRenderer->setViewSuffix('ptxt');
}
$this->getResponse()->setHeader('X-Action-Name', $request->getActionName(), TRUE);
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
$this->adjustAction($request);
$this->adjustView($request);
}
}
具体的Controller Action可以如下:
<?php
/**
* UsersController
*
* @author
* @version
*/
class UsersController extends Zend_Controller_Action {
/**
* The default action - show the home page
*/
public function indexAction() {
$this->getAction ();
}
public function getAction() {
$this->view->userId = $this->getUserId();
}
public function postAction() {
$this->view->userId = $this->getUserId();
}
public function putAction() {
$this->view->userId = $this->getUserId();
}
public function deleteAction() {
$this->view->userId = $this->getUserId();
}
protected function getUserId() {
if ($this->_getParam("id")) {
$userId = $this->_getParam("id");
} elseif ($this->_getParam("action") == "index") {
$userId = NULL;
} else {
$userId = $this->_getParam("action");
}
return $userId;
}
}
这样就可以通过http://yourhost.com/users来管理用户;通过http://yourhost.com/users/1来管理user ID=1的用户了。
分享到:
相关推荐
通过以上内容,你应该对`Zend_Controller_Plugin`有了深入的理解,能够有效地利用它来扩展和定制你的Zend Framework应用程序。记住,插件是一种强大的工具,可以让你在不修改核心代码的情况下实现复杂的功能,但也要...
1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...
### ZEND Framework MVC 架构详解 ...综上所述,ZEND Framework的MVC架构为开发者提供了一种高效、灵活的方式来构建Web应用程序。通过理解其核心组成部分及其工作原理,可以帮助开发者更好地利用这一架构进行开发。
Zend Framework 支持创建RESTful Web服务,通过Zend_Rest组件可以方便地构建提供XML或JSON数据的API。 8. **服务定位器(Service Locator)** 虽然较新的版本中已弃用,但在旧版 Zend Framework 中,服务定位器是...
### Zend Framework 基本请求工作流程与前端控制器分发工作流程详解 #### 一、概述 在深入探讨 Zend Framework 的基本请求工作流程与前端控制器分发工作流程之前,我们首先来了解一下 Zend Framework(ZF)的基本...
3. 在**UserOverrides**区域添加一个名为**tangram**的新环境变量,其值为Tangram Plugin Framework根目录的完整路径(例如:`D:\Tangram-plugin-FrameWork`)。 4. 接着点击左侧树形结构中的**『Delphi Options』**...
《深入理解Plugin Framework》 在IT领域,Plugin Framework(插件框架)是一种常见的软件架构模式,它允许开发者通过插入可扩展的功能模块(插件)来增强应用程序的能力,而无需修改核心代码。本篇文章将深入探讨...
`Zend_Controller_Action_ViewRenderer`是一个内置插件,它为每个Action控制器创建一个`Zend_View`实例,并将其绑定到控制器的`view`属性。当控制器处理完请求后,ViewRenderer会渲染对应的模板文件,并将结果放入...
TMS Plugin Framework 6.0.5 FS 是一款专为 Delphi 开发者设计的高级插件架构控件包,它提供了一整套完整的解决方案,帮助开发者构建可扩展、模块化的应用程序。该框架的核心在于其强大的插件管理系统和便捷的插件...
"jseclipse_plugin(zend studio插件JS离线安装包)" 这个标题表明我们讨论的是一个专门为Zend Studio开发的JavaScript插件的离线安装包。"jseclipse_plugin"可能是指该插件的名字,它旨在增强Zend Studio对...
本文将深入探讨Tangram Plugin Framework,这是一个专为Delphi编程环境打造的模块化插件框架。通过使用此框架,开发者可以轻松地创建可插拔的组件,实现应用程序的功能扩展和定制。 Delphi,由Embarcadero ...
TMS Plugin Framework 6.0.4 是一款专为Delphi开发者设计的插件式架构控件包,它提供了强大的功能,使得开发人员可以轻松地创建、管理和部署插件。这个框架的核心在于其模块化的设计,允许应用程序根据需要加载或...
总的来说,CTK Plugin Framework为开发医疗应用提供了强大的工具,允许开发者轻松地创建和集成插件,实现软件的模块化和可扩展性。通过学习这个实例,我们可以更好地理解如何利用CTK构建复杂的、具有插件架构的软件...
在项目中启用此Composer插件后,它会拦截来自zendframework和zfcampus供应商的安装软件包的请求,并将其替换为Laminas Project中的等效软件包。 安装 $ composer require laminas/laminas-dependency-plugin
TMS Plugin Framework 6 是一款专为DELPHI开发者设计的插件式架构控件包,它为构建高度可扩展和模块化的应用程序提供了强大的支持。这个框架的核心在于其插件管理组件和插件创建向导,使得开发者能够轻松地构建、...
主要介绍了Zend Framework教程之Loader以及PluginLoader用法,结合实例形式详细分析了Zend Framework自动加载机制的原理,使用方法与相关注意事项,需要的朋友可以参考下
这个类继承自`Zend_Controller_Plugin_Abstract`,即Zend Framework的插件抽象类。在这个类中,定义了多个属性,如文件上传存储路径、一次性最多上传文件数量、文件最大尺寸等。同时,还定义了允许上传的文件格式...
通过分析和研究这些源代码,开发者不仅可以了解TMS Plugin Framework的实现细节,还可以学习到如何构建跨版本的插件系统,以及如何利用Delphi的项目管理和编译配置来优化开发流程。这不仅有助于提升个人技能,也为...