Zend Framework创建自己的动作助手详解


Posted in PHP onMarch 05, 2016

本文实例讲述了Zend Framework创建自己的动作助手实现方法。分享给大家供大家参考,具体如下:

助手的抽象基类是Zend_Controller_Action_Helper_Abstract,如要定义自己的助手,需要继承此类

类的源代码如下:

<?php
/**
 * @see Zend_Controller_Action
 */
require_once 'Zend/Controller/Action.php';
abstract class Zend_Controller_Action_Helper_Abstract
{
  /**
   * $_actionController
   *
   * @var Zend_Controller_Action $_actionController
   */
  protected $_actionController = null;
  /**
   * @var mixed $_frontController
   */
  protected $_frontController = null;
  /**
   * setActionController()
   *
   * @param Zend_Controller_Action $actionController
   * @return Zend_Controller_ActionHelper_Abstract Provides a fluent interface
   */
  public function setActionController(Zend_Controller_Action $actionController = null)
  {
    $this->_actionController = $actionController;
    return $this;
  }
  /**
   * Retrieve current action controller
   *
   * @return Zend_Controller_Action
   */
  public function getActionController()
  {
    return $this->_actionController;
  }
  /**
   * Retrieve front controller instance
   *
   * @return Zend_Controller_Front
   */
  public function getFrontController()
  {
    return Zend_Controller_Front::getInstance();
  }
  /**
   * Hook into action controller initialization
   *
   * @return void
   */
  public function init()
  {
  }
  /**
   * Hook into action controller preDispatch() workflow
   *
   * @return void
   */
  public function preDispatch()
  {
  }
  /**
   * Hook into action controller postDispatch() workflow
   *
   * @return void
   */
  public function postDispatch()
  {
  }
  /**
   * getRequest() -
   *
   * @return Zend_Controller_Request_Abstract $request
   */
  public function getRequest()
  {
    $controller = $this->getActionController();
    if (null === $controller) {
      $controller = $this->getFrontController();
    }
    return $controller->getRequest();
  }
  /**
   * getResponse() -
   *
   * @return Zend_Controller_Response_Abstract $response
   */
  public function getResponse()
  {
    $controller = $this->getActionController();
    if (null === $controller) {
      $controller = $this->getFrontController();
    }
    return $controller->getResponse();
  }
  /**
   * getName()
   *
   * @return string
   */
  public function getName()
  {
    $fullClassName = get_class($this);
    if (strpos($fullClassName, '_') !== false) {
      $helperName = strrchr($fullClassName, '_');
      return ltrim($helperName, '_');
    } elseif (strpos($fullClassName, '\\') !== false) {
      $helperName = strrchr($fullClassName, '\\');
      return ltrim($helperName, '\\');
    } else {
      return $fullClassName;
    }
  }
}

助手基类提供的常用方法如下:

setActionController() 用来设置当前的动作控制器。
init(),该方法在实例化时由助手经纪人触发,可用来触发助手的初始化过程;
动作链中多个控制器使用相同的助手时,如要恢复状态时将十分有用。
preDispatch()分发动作之前触发。
postDispatch()分发过程结束时触发——即使preDispatch()插件已经跳过了该动作。清理时大量使用。
getRequest() 获取当前的请求对象。
getResponse() 获取当前的响应对象。
getName() 获取助手名。获取了下划线后面的类名部分,没有下划线则获取类的全名。

例如,如果类名为Zend_Controller_Action_Helper_Redirector,他将返回 Redirector,如果类名为FooMessage,将会返回全名。

举例说明自定义动作助手类

作用:解析传入的网址,返回各个部分。使用parse_url解析指定的网址。
用zendstudio新建一个zend framework项目helper_demo1。

新增文件:/helper_demo1/library/Application/Controller/Action/Helpers/UrlParser.php

<?php
require_once 'Zend/Controller/Action/Helper/Abstract.php';
class Application_Controller_Action_Helpers_UrlParser extends Zend_Controller_Action_Helper_Abstract
{
  public function __construct()
  {
  }
  /**
   * Parse url
   *
   * @param String $url
   * @return Array part of url
   */
  public function parse($url)
  {
    return parse_url($url);
  }
}

修改文件:/helper_demo1/application/Bootstrap.php

<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
  protected function _initAutoload()
  {
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace(array('Application_'));
  }
  protected function _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(new Application_Controller_Action_Helpers_UrlParser);
  }
}

修改测试action:/helper_demo1/application/controllers/IndexController.php

<?php
class IndexController extends Zend_Controller_Action
{
  public function init()
  {
    /* Initialize action controller here */
  }
  public function indexAction()
  {
    $urlParser = $this->_helper->getHelper('UrlParser');
  var_dump($urlParser->parse('https://3water.com/article/80479.htm'));
  }
}

以上介绍了自定义动作助手类,以及简单的使用方法。

需要注意的就是什么是助手类的前缀,助手类的名称以及助手的路径。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP实现小型站点广告管理(修正版)
Oct 09 PHP
追求程序速度,而不是编程的速度
Apr 23 PHP
PHP 创建标签云函数代码
May 26 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
php实现插入排序
Mar 29 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
Mar 05 #PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 #PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 #PHP
Zend Framework教程之模型Model用法简单实例
Mar 04 #PHP
基于PHP实现等比压缩图片大小
Mar 04 #PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 #PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 #PHP
You might like
php修改时间格式的代码
2011/05/29 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
JavaScript 最佳实践:帮你提升代码质量
2016/12/03 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python实现针对中文排序的方法
2017/05/09 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
施华洛世奇澳大利亚官网:SWAROVSKI澳大利亚
2017/01/06 全球购物
美国眼镜网:GlassesUSA
2017/09/07 全球购物
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
介绍一下Ruby的特点
2013/01/20 面试题
业务主管岗位职责范本
2013/12/25 职场文书
药店主任岗位责任制
2014/02/10 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
运动会通讯稿300字
2015/07/20 职场文书