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会员权限控制实现原理分析
May 29 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
php操作MongoDB类实例
Jun 17 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
May 27 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JavaScript数据结构学习之数组、栈与队列
2017/05/02 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
2017/12/11 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
vue组件中节流函数的失效的原因和解决方法
2020/12/02 Vue.js
Python函数学习笔记
2008/10/07 Python
python使用7z解压apk包的方法
2015/04/18 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
Python的垃圾回收机制详解
2019/08/28 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
Nike香港官网:Nike HK
2019/03/23 全球购物
欧克利英国官网:Oakley英国
2019/08/24 全球购物
会计人员岗位职责
2014/03/19 职场文书
工作说明书范文
2014/05/07 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
Python面试不修改数组找出重复的数字
2022/05/20 Python