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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
PHP导入导出Excel代码
Jul 07 PHP
浅析php静态方法与非静态方法的用法区别
May 17 PHP
zend framework重定向方法小结
May 28 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php生成微信红包数组的方法
Sep 05 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实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
vue.js中created方法作用
2018/03/30 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
js实现无限层级树形数据结构(创新算法)
2020/02/27 Javascript
Python多线程实例教程
2014/09/06 Python
在Django的session中使用User对象的方法
2015/07/23 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
请写出一段Python代码实现删除一个list里面的重复元素
2015/12/29 面试题
工作自我评价分享
2013/12/01 职场文书
机械系毕业生求职信
2014/05/28 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
2015年财政所工作总结
2015/04/25 职场文书
老干部座谈会主持词
2015/07/03 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL