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连接Oracle for NT 远程数据库
Oct 09 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
ThinkPHP标签制作教程
Jul 10 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
Yii2语言国际化的配置教程
Aug 19 PHP
PDO::quote讲解
Jan 29 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
Thinkphp中Create方法深入探究
2014/06/16 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
php使用include 和require引入文件的区别
2017/02/16 PHP
php对xml文件的增删改查操作实现方法分析
2017/05/19 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
js chrome浏览器判断代码
2010/03/28 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jquery获得option的值和对option进行操作
2013/12/13 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
详解Python当中的字符串和编码
2015/04/25 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
python保存文件方法小结
2018/07/27 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python实现图片九宫格分割
2021/03/07 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python 动态调用函数实例解析
2019/10/21 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
老公给老婆的检讨书(精华篇)
2014/10/18 职场文书
2014年银行柜员工作总结
2014/11/12 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
springboot读取nacos配置文件
2022/05/20 Java/Android