亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Zend Framework動作助手(Zend_Controller_Action_Helper)用法詳解

2024-05-04 23:43:36
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Zend Framework動作助手(Zend_Controller_Action_Helper)用法,詳細分析了動作助手Zend_Controller_Action_Helper功能,定義,使用方法與相關實現代碼,需要的朋友可以參考下
 

本文實例講述了Zend Framework動作助手(Zend_Controller_Action_Helper)用法。分享給大家供大家參考,具體如下:

通過助手模式,可以把一些經常使用的功能模塊做封裝,從而在可以在需要的地方靈活使用,主要是在action使用。

Zend Framework中有兩種助手,動作助手(Zend_Controller_Action_Helper)和試圖助手(Zend_View_Helper)。

動作助手可以向任何Zend_Controller_Action的衍生動作控制器中,即時的加入功能(runtime and/or on-demand functionality),以使得增加公共的動作控制器功能時,盡量減少衍生動作控制器類的必要。

動作助手在需要調用時加載,可以在請求的時候(bootstrap)或者動作控制器創建的時候(init())實例化。

涉及到的相關文件

在/library/Zend/Controller/Action/中

│  Exception.php
│  HelperBroker.php
│  Interface.php

├─Helper
│  │  Abstract.php
│  │  ActionStack.php
│  │  AjaxContext.php
│  │  AutoCompleteDojo.php
│  │  AutoCompleteScriptaculous.php
│  │  Cache.php
│  │  ContextSwitch.php
│  │  FlashMessenger.php
│  │  Json.php
│  │  Redirector.php
│  │  Url.php
│  │  ViewRenderer.php
│  │
│  └─AutoComplete
│          Abstract.php

└─HelperBroker
       PriorityStack.php

常見的動作助手有

FlashMessenger 用來處理Flash Messenger會話;
Json 用來解碼和發送 JSON 響應;
Url  用于創建Urls;
Redirector 提供另一種實現方式,幫助程序重定向到內部或者外部頁面;
ViewRenderer 自動的完成在控制器內建立視圖對象并渲染視圖的過程;
AutoComplete 自動響應 AJAX 的自動完成;
ContextSwitch 和 AjaxContext 為你的動作提供替代響應格式;
Cache  實現cache的相關操作;
ActionStack 用于操作動作堆棧。

動手的幾種實例化使用方式

1.通過Zend_Controller_Action的 $_helper成員的getHelper()方法。直接調用getHelper(),傳入助手的名稱即可。

$redirector = $this->_helper->getHelper('Redirector');//$redirector->getName();$redirector->gotoSimple('index2');

2.直接通過訪問的_helper助手的屬性對應的助手對象。

$redirector = $this->_helper->Redirector;

Zend_Controller_Action_HelperBroker

中文名稱譯作"助手經紀人",顧名思義,是動作助手的中間人。

在動作的實例化使用的方式的第二種方式就是通過Zend_Controller_Action_HelperBroker的魔術方法__get()來實現的。

助手經紀人用于注冊助手對象和助手路徑以及獲取助手等等功能。

Zend_Controller_Action_HelperBroker的實現以及常用方法列表

<?php/** * @see Zend_Controller_Action_HelperBroker_PriorityStack */require_once 'Zend/Controller/Action/HelperBroker/PriorityStack.php';/** * @see Zend_Loader */require_once 'Zend/Loader.php';/** * @category  Zend * @package  Zend_Controller * @subpackage Zend_Controller_Action * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license  http://framework.zend.com/license/new-bsd   New BSD License */class Zend_Controller_Action_HelperBroker{  /**   * $_actionController - ActionController reference   *   * @var Zend_Controller_Action   */  protected $_actionController;  /**   * @var Zend_Loader_PluginLoader_Interface   */  protected static $_pluginLoader;  /**   * $_helpers - Helper array   *   * @var Zend_Controller_Action_HelperBroker_PriorityStack   */  protected static $_stack = null;  /**   * Set PluginLoader for use with broker   *   * @param Zend_Loader_PluginLoader_Interface $loader   * @return void   */  public static function setPluginLoader($loader)  {    if ((null !== $loader) && (!$loader instanceof Zend_Loader_PluginLoader_Interface)) {      require_once 'Zend/Controller/Action/Exception.php';      throw new Zend_Controller_Action_Exception('Invalid plugin loader provided to HelperBroker');    }    self::$_pluginLoader = $loader;  }  /**   * Retrieve PluginLoader   *   * @return Zend_Loader_PluginLoader   */  public static function getPluginLoader()  {    if (null === self::$_pluginLoader) {      require_once 'Zend/Loader/PluginLoader.php';      self::$_pluginLoader = new Zend_Loader_PluginLoader(array(        'Zend_Controller_Action_Helper' => 'Zend/Controller/Action/Helper/',      ));    }    return self::$_pluginLoader;  }  /**   * addPrefix() - Add repository of helpers by prefix   *   * @param string $prefix   */  static public function addPrefix($prefix)  {    $prefix = rtrim($prefix, '_');    $path  = str_replace('_', DIRECTORY_SEPARATOR, $prefix);    self::getPluginLoader()->addPrefixPath($prefix, $path);  }  /**   * addPath() - Add path to repositories where Action_Helpers could be found.   *   * @param string $path   * @param string $prefix Optional; defaults to 'Zend_Controller_Action_Helper'   * @return void   */  static public function addPath($path, $prefix = 'Zend_Controller_Action_Helper')  {    self::getPluginLoader()->addPrefixPath($prefix, $path);  }  /**   * addHelper() - Add helper objects   *   * @param Zend_Controller_Action_Helper_Abstract $helper   * @return void   */  static public function addHelper(Zend_Controller_Action_Helper_Abstract $helper)  {    self::getStack()->push($helper);    return;  }  /**   * resetHelpers()   *   * @return void   */  static public function resetHelpers()  {    self::$_stack = null;    return;  }  /**   * Retrieve or initialize a helper statically   *   * Retrieves a helper object statically, loading on-demand if the helper   * does not already exist in the stack. Always returns a helper, unless   * the helper class cannot be found.   *   * @param string $name   * @return Zend_Controller_Action_Helper_Abstract   */  public static function getStaticHelper($name)  {    $name = self::_normalizeHelperName($name);    $stack = self::getStack();    if (!isset($stack->{$name})) {      self::_loadHelper($name);    }    return $stack->{$name};  }  /**   * getExistingHelper() - get helper by name   *   * Static method to retrieve helper object. Only retrieves helpers already   * initialized with the broker (either via addHelper() or on-demand loading   * via getHelper()).   *   * Throws an exception if the referenced helper does not exist in the   * stack; use {@link hasHelper()} to check if the helper is registered   * prior to retrieving it.   *   * @param string $name   * @return Zend_Controller_Action_Helper_Abstract   * @throws Zend_Controller_Action_Exception   */  public static function getExistingHelper($name)  {    $name = self::_normalizeHelperName($name);    $stack = self::getStack();    if (!isset($stack->{$name})) {      require_once 'Zend/Controller/Action/Exception.php';      throw new Zend_Controller_Action_Exception('Action helper "' . $name . '" has not been registered with the helper broker');    }    return $stack->{$name};  }  /**   * Return all registered helpers as helper => object pairs   *   * @return array   */  public static function getExistingHelpers()  {    return self::getStack()->getHelpersByName();  }  /**   * Is a particular helper loaded in the broker?   *   * @param string $name   * @return boolean   */  public static function hasHelper($name)  {    $name = self::_normalizeHelperName($name);    return isset(self::getStack()->{$name});  }  /**   * Remove a particular helper from the broker   *   * @param string $name   * @return boolean   */  public static function removeHelper($name)  {    $name = self::_normalizeHelperName($name);    $stack = self::getStack();    if (isset($stack->{$name})) {      unset($stack->{$name});    }    return false;  }  /**   * Lazy load the priority stack and return it   *   * @return Zend_Controller_Action_HelperBroker_PriorityStack   */  public static function getStack()  {    if (self::$_stack == null) {      self::$_stack = new Zend_Controller_Action_HelperBroker_PriorityStack();    }    return self::$_stack;  }  /**   * Constructor   *   * @param Zend_Controller_Action $actionController   * @return void   */  public function __construct(Zend_Controller_Action $actionController)  {    $this->_actionController = $actionController;    foreach (self::getStack() as $helper) {      $helper->setActionController($actionController);      $helper->init();    }  }  /**   * notifyPreDispatch() - called by action controller dispatch method   *   * @return void   */  public function notifyPreDispatch()  {    foreach (self::getStack() as $helper) {      $helper->preDispatch();    }  }  /**   * notifyPostDispatch() - called by action controller dispatch method   *   * @return void   */  public function notifyPostDispatch()  {    foreach (self::getStack() as $helper) {      $helper->postDispatch();    }  }  /**   * getHelper() - get helper by name   *   * @param string $name   * @return Zend_Controller_Action_Helper_Abstract   */  public function getHelper($name)  {    $name = self::_normalizeHelperName($name);    $stack = self::getStack();    if (!isset($stack->{$name})) {      self::_loadHelper($name);    }    $helper = $stack->{$name};    $initialize = false;    if (null === ($actionController = $helper->getActionController())) {      $initialize = true;    } elseif ($actionController !== $this->_actionController) {      $initialize = true;    }    if ($initialize) {      $helper->setActionController($this->_actionController)          ->init();    }    return $helper;  }  /**   * Method overloading   *   * @param string $method   * @param array $args   * @return mixed   * @throws Zend_Controller_Action_Exception if helper does not have a direct() method   */  public function __call($method, $args)  {    $helper = $this->getHelper($method);    if (!method_exists($helper, 'direct')) {      require_once 'Zend/Controller/Action/Exception.php';      throw new Zend_Controller_Action_Exception('Helper "' . $method . '" does not support overloading via direct()');    }    return call_user_func_array(array($helper, 'direct'), $args);  }  /**   * Retrieve helper by name as object property   *   * @param string $name   * @return Zend_Controller_Action_Helper_Abstract   */  public function __get($name)  {    return $this->getHelper($name);  }  /**   * Normalize helper name for lookups   *   * @param string $name   * @return string   */  protected static function _normalizeHelperName($name)  {    if (strpos($name, '_') !== false) {      $name = str_replace(' ', '', ucwords(str_replace('_', ' ', $name)));    }    return ucfirst($name);  }  /**   * Load a helper   *   * @param string $name   * @return void   */  protected static function _loadHelper($name)  {    try {      $class = self::getPluginLoader()->load($name);    } catch (Zend_Loader_PluginLoader_Exception $e) {      require_once 'Zend/Controller/Action/Exception.php';      throw new Zend_Controller_Action_Exception('Action Helper by name ' . $name . ' not found', 0, $e);    }    $helper = new $class();    if (!$helper instanceof Zend_Controller_Action_Helper_Abstract) {      require_once 'Zend/Controller/Action/Exception.php';      throw new Zend_Controller_Action_Exception('Helper name ' . $name . ' -> class ' . $class . ' is not of type Zend_Controller_Action_Helper_Abstract');    }    self::getStack()->push($helper);  }}

助手經紀人的常見用法:

一、注冊一個助手

1.

Zend_Controller_Action_HelperBroker::addHelper($helper);

2.通過addPrefix()方法帶有一個類前綴參數,用來加入自定義助手類的路徑。
要求前綴遵循Zend Framework的類命名慣例。

// Add helpers prefixed with My_Action_Helpers in My/Action/Helpers/Zend_Controller_Action_HelperBroker::addPrefix('My_Action_Helpers');

3.使用addPath()方法第一個參數為一個目錄,第二個為類前綴(默認為'Zend_Controller_Action_Helper')。

用來將自己的類前綴映射到指定的目錄。

// Add helpers prefixed with Helper in Plugins/Helpers/Zend_Controller_Action_HelperBroker::addPath('./Plugins/Helpers',                       'Helper');

二、判讀助手是否存在

使用hasHelper($name)方法來判定助手經紀人中是否存在某助手,$name是助手的短名稱(去掉前綴的):

// Check if 'redirector' helper is registered with the broker:if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {  echo 'Redirector helper registered';}

從助手經紀人中獲取助手有兩個靜態方法:getExistingHelper() 和 getStaticHelper() 。getExistingHelper()將獲取助手僅當它以前調用過或者顯性地通過助手經紀人注冊過,否則就拋出一個異常。getStaticHelper() 的做法和getExistingHelper()一樣,但如果還沒有注冊助手堆棧,它將嘗試初始化助手,為獲取你要配置的的助手,getStaticHelper()是一個好的選擇。

兩個方法都帶一個參數,$name,它是助手的短名稱(去掉前綴)。

// Check if 'redirector' helper is registered with the broker, and fetch:if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {  $redirector =    Zend_Controller_Action_HelperBroker::getExistingHelper('redirector');}// Or, simply retrieve it, not worrying about whether or not it was// previously registered:$redirector =  Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');}

三、removeHelper($name)刪除助手經紀人中的某個助手,$name是助手的短名稱

// Conditionally remove the 'redirector' helper from the broker:if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {  Zend_Controller_Action_HelperBroker::removeHelper('redirector')}
 


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频yy9099| 午夜美女久久久久爽久久| 中文字幕精品www乱入免费视频| 亚洲人成网站在线播| 亚洲女人天堂色在线7777| 中文字幕成人在线| 亚洲精品免费一区二区三区| 成人xxxxx| 北条麻妃一区二区在线观看| 一区二区三区无码高清视频| 亚洲美女av电影| 中文字幕亚洲欧美在线| 国产精品2018| 日韩精品免费看| 日韩av在线看| 日韩av成人在线观看| 亚洲国产欧美一区二区三区久久| 97在线观看免费高清| 国产97在线|日韩| 青青久久av北条麻妃海外网| 国产精品盗摄久久久| 国产精品一区二区女厕厕| 国产成人亚洲综合91| 91精品免费久久久久久久久| 亚洲精品国产综合久久| 亚洲欧洲午夜一线一品| 成人国产精品日本在线| 欧美国产亚洲精品久久久8v| 亚洲精品白浆高清久久久久久| 中文字幕日韩在线视频| 欧美激情中文网| 国产精品扒开腿做爽爽爽的视频| 精品少妇一区二区30p| 国产欧美 在线欧美| 日韩视频在线免费观看| 在线播放日韩专区| 在线性视频日韩欧美| 欧美极品少妇与黑人| 亚洲精品自拍视频| 91国产精品视频在线| 日韩免费av片在线观看| 久久成人综合视频| 91高清视频免费| 亚洲一区二区三区毛片| 欧美国产中文字幕| 欧美www视频在线观看| 国产成人aa精品一区在线播放| 日韩精品在线免费播放| 欧美日韩国产在线播放| 国产日韩在线看片| 日韩成人免费视频| 欧美日韩亚洲91| 色诱女教师一区二区三区| 性欧美激情精品| 久久久久国产精品免费| 亚洲精品小视频| 97热在线精品视频在线观看| 日韩在线观看免费高清| 国产精品女视频| 欧美日韩中文字幕在线视频| 国产精品69久久| 欧美大片免费观看在线观看网站推荐| 国产精品视频网址| 欧美一级高清免费播放| 亚洲国产成人久久综合一区| 亚洲免费人成在线视频观看| 欧美综合激情网| 日韩一二三在线视频播| 亚洲第一网站男人都懂| 国外色69视频在线观看| 亚洲欧美精品在线| 国产精品小说在线| 成人免费激情视频| 丝袜美腿亚洲一区二区| 国产精品视频专区| 国产在线视频91| 国产精品吊钟奶在线| 成人免费视频xnxx.com| 伊人亚洲福利一区二区三区| 欧美日韩国产成人| 欧美精品免费播放| 欧日韩不卡在线视频| 欧美床上激情在线观看| www.日本久久久久com.| 久久91精品国产91久久跳| 欧美在线观看日本一区| 日本精品一区二区三区在线播放视频| 亚洲专区在线视频| 韩国一区二区电影| 成人免费看吃奶视频网站| 日韩美女在线播放| 久久久久久国产精品| 久久成人精品一区二区三区| 成人福利免费观看| 亚洲视频一区二区三区| 欧美精品福利视频| 在线亚洲男人天堂| 丰满岳妇乱一区二区三区| 国产精品丝袜久久久久久不卡| 久久99视频免费| 欧美中在线观看| 亚洲男人天堂视频| 欧美成人午夜激情视频| 国产日韩视频在线观看| 亚洲黄在线观看| 欧美激情va永久在线播放| 亚洲无限乱码一二三四麻| 亚洲色无码播放| 中文字幕日韩欧美精品在线观看| 久久久999国产| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产裸体写真av一区二区| 成人免费网站在线看| 国产精品电影在线观看| 91精品国产成人| 69影院欧美专区视频| 中文字幕日韩综合av| 5566日本婷婷色中文字幕97| 国产精品永久在线| 日韩最新在线视频| 欧美肥老妇视频| 九九热最新视频//这里只有精品| 亚洲国产精品中文| 国产精品亚洲综合天堂夜夜| 欧美寡妇偷汉性猛交| 国产在线不卡精品| 亚洲一区二区三区视频| 成人444kkkk在线观看| 亚洲精品久久久久| 91亚洲精华国产精华| 日韩成人中文字幕| 欧美黑人又粗大| 国产精品高精视频免费| 欧美在线不卡区| 欧美精品videos另类日本| 欧美激情国产精品| 日韩中文在线不卡| 国产精品久久国产精品99gif| 亚洲国产精品嫩草影院久久| 欧美性猛交xxxx乱大交| 国产91在线高潮白浆在线观看| 欧美日韩国产成人| 国产精品678| 亚洲精品视频二区| 欧美美最猛性xxxxxx| 日韩高清a**址| 精品五月天久久| 欧美激情亚洲激情| 亚洲视频在线看| 日韩精品视频中文在线观看| 日韩av电影国产| 97精品国产aⅴ7777| 97精品伊人久久久大香线蕉| 亚洲精品乱码久久久久久金桔影视| 日本中文字幕成人| 亚洲天堂av综合网| 国产精品1区2区在线观看| 日韩女优人人人人射在线视频| 日韩欧美亚洲一二三区| 国产精品久久久久久搜索| www.美女亚洲精品| 亚洲综合大片69999| 国产欧美日韩免费看aⅴ视频| 2024亚洲男人天堂|