Zend Framework创建自己的动作助手详解
本文实例讲述了ZendFramework创建自己的动作助手实现方法。分享给大家供大家参考,具体如下:
助手的抽象基类是Zend_Controller_Action_Helper_Abstract,如要定义自己的助手,需要继承此类。
类的源代码如下:
<?php /** *@seeZend_Controller_Action */ require_once'Zend/Controller/Action.php'; abstractclassZend_Controller_Action_Helper_Abstract { /** *$_actionController * *@varZend_Controller_Action$_actionController */ protected$_actionController=null; /** *@varmixed$_frontController */ protected$_frontController=null; /** *setActionController() * *@paramZend_Controller_Action$actionController *@returnZend_Controller_ActionHelper_AbstractProvidesafluentinterface */ publicfunctionsetActionController(Zend_Controller_Action$actionController=null) { $this->_actionController=$actionController; return$this; } /** *Retrievecurrentactioncontroller * *@returnZend_Controller_Action */ publicfunctiongetActionController() { return$this->_actionController; } /** *Retrievefrontcontrollerinstance * *@returnZend_Controller_Front */ publicfunctiongetFrontController() { returnZend_Controller_Front::getInstance(); } /** *Hookintoactioncontrollerinitialization * *@returnvoid */ publicfunctioninit() { } /** *HookintoactioncontrollerpreDispatch()workflow * *@returnvoid */ publicfunctionpreDispatch() { } /** *HookintoactioncontrollerpostDispatch()workflow * *@returnvoid */ publicfunctionpostDispatch() { } /** *getRequest()- * *@returnZend_Controller_Request_Abstract$request */ publicfunctiongetRequest() { $controller=$this->getActionController(); if(null===$controller){ $controller=$this->getFrontController(); } return$controller->getRequest(); } /** *getResponse()- * *@returnZend_Controller_Response_Abstract$response */ publicfunctiongetResponse() { $controller=$this->getActionController(); if(null===$controller){ $controller=$this->getFrontController(); } return$controller->getResponse(); } /** *getName() * *@returnstring */ publicfunctiongetName() { $fullClassName=get_class($this); if(strpos($fullClassName,'_')!==false){ $helperName=strrchr($fullClassName,'_'); returnltrim($helperName,'_'); }elseif(strpos($fullClassName,'\\')!==false){ $helperName=strrchr($fullClassName,'\\'); returnltrim($helperName,'\\'); }else{ return$fullClassName; } } }
助手基类提供的常用方法如下:
setActionController()用来设置当前的动作控制器。
init(),该方法在实例化时由助手经纪人触发,可用来触发助手的初始化过程;
动作链中多个控制器使用相同的助手时,如要恢复状态时将十分有用。
preDispatch()分发动作之前触发。
postDispatch()分发过程结束时触发——即使preDispatch()插件已经跳过了该动作。清理时大量使用。
getRequest()获取当前的请求对象。
getResponse()获取当前的响应对象。
getName()获取助手名。获取了下划线后面的类名部分,没有下划线则获取类的全名。
例如,如果类名为Zend_Controller_Action_Helper_Redirector,他将返回Redirector,如果类名为FooMessage,将会返回全名。
举例说明自定义动作助手类
作用:解析传入的网址,返回各个部分。使用parse_url解析指定的网址。
用zendstudio新建一个zendframework项目helper_demo1。
新增文件:/helper_demo1/library/Application/Controller/Action/Helpers/UrlParser.php
<?php require_once'Zend/Controller/Action/Helper/Abstract.php'; classApplication_Controller_Action_Helpers_UrlParserextendsZend_Controller_Action_Helper_Abstract { publicfunction__construct() { } /** *Parseurl * *@paramString$url *@returnArraypartofurl */ publicfunctionparse($url) { returnparse_url($url); } }
修改文件:/helper_demo1/application/Bootstrap.php
<?php classBootstrapextendsZend_Application_Bootstrap_Bootstrap { protectedfunction_initAutoload() { $autoloader=Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace(array('Application_')); } protectedfunction_initActionHelpers(){ //用前缀形式 //Zend_Controller_Action_HelperBroker::addPrefix('Application_Controller_Action_Helpers'); //指定目录和前缀 //Zend_Controller_Action_HelperBroker::addPath('/www/helper_demo1/library/Application/Controller/Action/Helpers', //'Application_Controller_Action_Helpers'); //new一个助手类传入 Zend_Controller_Action_HelperBroker::addHelper(newApplication_Controller_Action_Helpers_UrlParser); } }
修改测试action:/helper_demo1/application/controllers/IndexController.php
<?php classIndexControllerextendsZend_Controller_Action { publicfunctioninit() { /*Initializeactioncontrollerhere*/ } publicfunctionindexAction() { $urlParser=$this->_helper->getHelper('UrlParser'); var_dump($urlParser->parse('https://www.nhooo.com/article/80479.htm')); } }
以上介绍了自定义动作助手类,以及简单的使用方法。
需要注意的就是什么是助手类的前缀,助手类的名称以及助手的路径。
更多关于zend相关内容感兴趣的读者可查看本站专题:《ZendFrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。