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程序设计有所帮助。