`
lht
  • 浏览: 199710 次
  • 来自: 深圳
社区版块
存档分类
最新评论

利用Plugin为ZendFramework加上RESTful动作

阅读更多

上一篇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 Framework教程之Zend_Controller_Plugin插件用法详解

    通过以上内容,你应该对`Zend_Controller_Plugin`有了深入的理解,能够有效地利用它来扩展和定制你的Zend Framework应用程序。记住,插件是一种强大的工具,可以让你在不修改核心代码的情况下实现复杂的功能,但也要...

    ZendFramework中文文档

    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 的一些知识

    ### ZEND Framework MVC 架构详解 ...综上所述,ZEND Framework的MVC架构为开发者提供了一种高效、灵活的方式来构建Web应用程序。通过理解其核心组成部分及其工作原理,可以帮助开发者更好地利用这一架构进行开发。

    Zend_Framework 中文手册

    Zend Framework 支持创建RESTful Web服务,通过Zend_Rest组件可以方便地构建提供XML或JSON数据的API。 8. **服务定位器(Service Locator)** 虽然较新的版本中已弃用,但在旧版 Zend Framework 中,服务定位器是...

    zendframework结构应用示例图

    ### Zend Framework 基本请求工作流程与前端控制器分发工作流程详解 #### 一、概述 在深入探讨 Zend Framework 的基本请求工作流程与前端控制器分发工作流程之前,我们首先来了解一下 Zend Framework(ZF)的基本...

    Tangram Plugin FrameWork 安裝及配置 IDE

    3. 在**UserOverrides**区域添加一个名为**tangram**的新环境变量,其值为Tangram Plugin Framework根目录的完整路径(例如:`D:\Tangram-plugin-FrameWork`)。 4. 接着点击左侧树形结构中的**『Delphi Options』**...

    plugin-framework

    《深入理解Plugin Framework》 在IT领域,Plugin Framework(插件框架)是一种常见的软件架构模式,它允许开发者通过插入可扩展的功能模块(插件)来增强应用程序的能力,而无需修改核心代码。本篇文章将深入探讨...

    Zend framework处理一个http请求的流程分析

    `Zend_Controller_Action_ViewRenderer`是一个内置插件,它为每个Action控制器创建一个`Zend_View`实例,并将其绑定到控制器的`view`属性。当控制器处理完请求后,ViewRenderer会渲染对应的模板文件,并将结果放入...

    TMS Plugin Framework 6.0.5 FS

    TMS Plugin Framework 6.0.5 FS 是一款专为 Delphi 开发者设计的高级插件架构控件包,它提供了一整套完整的解决方案,帮助开发者构建可扩展、模块化的应用程序。该框架的核心在于其强大的插件管理系统和便捷的插件...

    Tangram Plugin FrameWork基于Delphi的模块化插件框架..rar

    本文将深入探讨Tangram Plugin Framework,这是一个专为Delphi编程环境打造的模块化插件框架。通过使用此框架,开发者可以轻松地创建可插拔的组件,实现应用程序的功能扩展和定制。 Delphi,由Embarcadero ...

    jseclipse_plugin(zend studio插件JS离线安装包)

    "jseclipse_plugin(zend studio插件JS离线安装包)" 这个标题表明我们讨论的是一个专门为Zend Studio开发的JavaScript插件的离线安装包。"jseclipse_plugin"可能是指该插件的名字,它旨在增强Zend Studio对...

    TMS Plugin Framework 6.0.4 sources

    TMS Plugin Framework 6.0.4 是一款专为Delphi开发者设计的插件式架构控件包,它提供了强大的功能,使得开发人员可以轻松地创建、管理和部署插件。这个框架的核心在于其模块化的设计,允许应用程序根据需要加载或...

    CTK Plugin Framework实例

    总的来说,CTK Plugin Framework为开发医疗应用提供了强大的工具,允许开发者轻松地创建和集成插件,实现软件的模块化和可扩展性。通过学习这个实例,我们可以更好地理解如何利用CTK构建复杂的、具有插件架构的软件...

    laminas-dependency-plugin:用其Laminas Project等效项替换zendframework和zfcampus软件包

    在项目中启用此Composer插件后,它会拦截来自zendframework和zfcampus供应商的安装软件包的请求,并将其替换为Laminas Project中的等效软件包。 安装 $ composer require laminas/laminas-dependency-plugin

    The TMS Plugin Framework 6

    TMS Plugin Framework 6 是一款专为DELPHI开发者设计的插件式架构控件包,它为构建高度可扩展和模块化的应用程序提供了强大的支持。这个框架的核心在于其插件管理组件和插件创建向导,使得开发者能够轻松地构建、...

    Zend Framework教程之Loader以及PluginLoader用法详解

    主要介绍了Zend Framework教程之Loader以及PluginLoader用法,结合实例形式详细分析了Zend Framework自动加载机制的原理,使用方法与相关注意事项,需要的朋友可以参考下

    Zend Framework实现多文件上传功能实例

    这个类继承自`Zend_Controller_Plugin_Abstract`,即Zend Framework的插件抽象类。在这个类中,定义了多个属性,如文件上传存储路径、一次性最多上传文件数量、文件最大尺寸等。同时,还定义了允许上传的文件格式...

    TMS_Plugin_Framework_6.0.4_sources.7z

    通过分析和研究这些源代码,开发者不仅可以了解TMS Plugin Framework的实现细节,还可以学习到如何构建跨版本的插件系统,以及如何利用Delphi的项目管理和编译配置来优化开发流程。这不仅有助于提升个人技能,也为...

Global site tag (gtag.js) - Google Analytics