当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-13 14:38:02 浏览: 评论:0 

这篇文章主要介绍了Zend Framework创建自己的动作助手实现方法,结合实例形式分析了基于助手的抽象基类Zend_Controller_Action_Helper_Abstract实现自定义动作助手的相关技巧,需要的朋友可以参考下。

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

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

类的源代码如下:

  1. <?php 
  2. /** 
  3.  * @see Zend_Controller_Action 
  4.  */ 
  5. require_once 'Zend/Controller/Action.php'; 
  6. abstract class Zend_Controller_Action_Helper_Abstract 
  7. { 
  8.   /** 
  9.    * $_actionController 
  10.    * 
  11.    * @var Zend_Controller_Action $_actionController 
  12.    */ 
  13.   protected $_actionController = null; 
  14.   /** 
  15.    * @var mixed $_frontController 
  16.    */ 
  17.   protected $_frontController = null; 
  18.   /** 
  19.    * setActionController() 
  20.    * 
  21.    * @param Zend_Controller_Action $actionController 
  22.    * @return Zend_Controller_ActionHelper_Abstract Provides a fluent interface 
  23.    */ 
  24.   public function setActionController(Zend_Controller_Action $actionController = null) 
  25.   { 
  26.     $this->_actionController = $actionController; 
  27.     return $this; 
  28.   } 
  29.   /** 
  30.    * Retrieve current action controller 
  31.    * 
  32.    * @return Zend_Controller_Action 
  33.    */ 
  34.   public function getActionController() 
  35.   { 
  36.     return $this->_actionController; 
  37.   } 
  38.   /** 
  39.    * Retrieve front controller instance 
  40.    * 
  41.    * @return Zend_Controller_Front 
  42.    */ 
  43.   public function getFrontController() 
  44.   { 
  45.     return Zend_Controller_Front::getInstance(); 
  46.   } 
  47.   /** 
  48.    * Hook into action controller initialization 
  49.    * 
  50.    * @return void 
  51.    */ 
  52.   public function init() 
  53.   { 
  54.   } 
  55.   /** 
  56.    * Hook into action controller preDispatch() workflow 
  57.    * 
  58.    * @return void 
  59.    */ 
  60.   public function preDispatch() 
  61.   { 
  62.   } 
  63.   /** 
  64.    * Hook into action controller postDispatch() workflow 
  65.    * 
  66.    * @return void 
  67.    */ 
  68.   public function postDispatch() 
  69.   { 
  70.   } 
  71.   /** 
  72.    * getRequest() - 
  73.    * 
  74.    * @return Zend_Controller_Request_Abstract $request 
  75.    */ 
  76.   public function getRequest() 
  77.   { 
  78.     $controller = $this->getActionController(); 
  79.     if (null === $controller) { 
  80.       $controller = $this->getFrontController(); 
  81.     } 
  82.     return $controller->getRequest(); 
  83.   } 
  84.   /** 
  85.    * getResponse() - 
  86.    * 
  87.    * @return Zend_Controller_Response_Abstract $response 
  88.    */ 
  89.   public function getResponse() 
  90.   { 
  91.     $controller = $this->getActionController(); 
  92.     if (null === $controller) { 
  93.       $controller = $this->getFrontController(); 
  94.     } 
  95.     return $controller->getResponse(); 
  96.   } 
  97.   /** 
  98.    * getName() 
  99.    * 
  100.    * @return string 
  101.    */ 
  102.   public function getName() 
  103.   { 
  104.     $fullClassName = get_class($this); 
  105.     if (strpos($fullClassName, '_') !== false) { 
  106.       $helperName = strrchr($fullClassName, '_'); 
  107.       return ltrim($helperName, '_'); 
  108.     } elseif (strpos($fullClassName, '\\') !== false) { 
  109.       $helperName = strrchr($fullClassName, '\\'); 
  110.       return ltrim($helperName, '\\'); 
  111.     } else { 
  112.       return $fullClassName; 
  113.     } 
  114.   } 
  115. } 

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

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

  1. <?php 
  2. require_once 'Zend/Controller/Action/Helper/Abstract.php'; 
  3. class Application_Controller_Action_Helpers_UrlParser extends Zend_Controller_Action_Helper_Abstract 
  4. { 
  5.   public function __construct() 
  6.   { 
  7.   } 
  8.   /** 
  9.    * Parse url 
  10.    * 
  11.    * @param String $url 
  12.    * @return Array part of url 
  13.    */ 
  14.   public function parse($url) 
  15.   { 
  16.     return parse_url($url); 
  17.   } 
  18. } 

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

  1. <?php 
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
  3. { 
  4.   protected function _initAutoload() 
  5.   { 
  6.     $autoloader = Zend_Loader_Autoloader::getInstance(); 
  7.     $autoloader->registerNamespace(array('Application_')); 
  8.   } 
  9.   protected function _initActionHelpers() { 
  10.     //用前缀形式 
  11.     //Zend_Controller_Action_HelperBroker::addPrefix('Application_Controller_Action_Helpers'); 
  12.     //指定目录和前缀 
  13.     //Zend_Controller_Action_HelperBroker::addPath('/www/helper_demo1/library/Application/Controller/Action/Helpers', 
  14.     //                  'Application_Controller_Action_Helpers'); 
  15.     //new一个助手类传入 
  16.     Zend_Controller_Action_HelperBroker::addHelper(new Application_Controller_Action_Helpers_UrlParser); 
  17.   } 
  18. } 

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

  1. <?php 
  2. class IndexController extends Zend_Controller_Action 
  3. { 
  4.   public function init() 
  5.   { 
  6.     /* Initialize action controller here */ 
  7.   } 
  8.   public function indexAction() 
  9.   { 
  10.     $urlParser = $this->_helper->getHelper('UrlParser'); 
  11.   var_dump($urlParser->parse('https://www.jb51.net/article/80479.htm')); 
  12.   } 
  13. } 

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

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

Tags: Framework创建动作

分享到: