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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
php获取地址栏信息的代码
Oct 08 PHP
php 正确解码javascript中通过escape编码后的字符
Jan 28 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
php创建图像具体步骤
Mar 13 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
Laravel框架集合用法实例浅析
May 14 PHP
详解阿里云视频直播PHP-SDK接入教程
Jul 09 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
轻松修复Discuz!数据库
2008/05/03 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
详解PHP 二维数组排序保持键名不变
2019/03/06 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
初识javascript 文档碎片
2010/07/13 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
python中子类继承父类的__init__方法实例
2016/12/15 Python
python 显示数组全部元素的方法
2018/04/19 Python
pandas 将索引值相加的方法
2018/11/15 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
New Balance澳大利亚官网:运动鞋和健身服装
2019/02/23 全球购物
企业总经理岗位职责
2014/02/13 职场文书
学生安全教育材料
2014/02/14 职场文书
银行委托书范本
2014/04/04 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
总经理岗位职责范本
2015/04/01 职场文书
行政复议决定书
2015/06/24 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
MYSQL 运算符总结
2021/11/11 MySQL