


Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解_php实例
本文实例讲述了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') }
更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

.NET Framework 4 est requis par les développeurs et les utilisateurs finaux pour exécuter les dernières versions des applications sous Windows. Cependant, lors du téléchargement et de l'installation de .NET Framework 4, de nombreux utilisateurs se sont plaints de l'arrêt du programme d'installation à mi-chemin, affichant le message d'erreur suivant : « .NET Framework 4 n'a pas été installé car le téléchargement a échoué avec le code d'erreur 0x800c0006 ». Si vous le rencontrez également lors de l'installation de .NETFramework4 sur votre appareil, vous êtes au bon endroit

Chaque fois que votre PC Windows 11 ou Windows 10 rencontre un problème de mise à niveau ou de mise à jour, vous verrez généralement un code d'erreur indiquant la raison réelle de l'échec. Cependant, une confusion peut parfois survenir lorsqu'une mise à niveau ou une mise à jour échoue sans qu'un code d'erreur ne s'affiche. Grâce à des codes d'erreur pratiques, vous savez exactement où se situe le problème afin que vous puissiez essayer de le résoudre. Mais comme aucun code d’erreur n’apparaît, il devient difficile d’identifier le problème et de le résoudre. Cela prendra beaucoup de temps pour simplement découvrir la raison de l'erreur. Dans ce cas, vous pouvez essayer d'utiliser un outil dédié appelé SetupDiag fourni par Microsoft qui vous aide à identifier facilement la véritable raison de l'erreur.
![SCNotification a cessé de fonctionner [5 étapes pour y remédier]](https://img.php.cn/upload/article/000/887/227/168433050522031.png?x-oss-process=image/resize,m_fill,h_207,w_330)
En tant qu'utilisateur Windows, vous rencontrerez probablement une erreur SCNotification a cessé de fonctionner à chaque démarrage de votre ordinateur. SCNotification.exe est un fichier de notification système Microsoft qui plante à chaque démarrage de votre PC en raison d'erreurs d'autorisation et de pannes de réseau. Cette erreur est également connue sous son nom d’événement problématique. Vous ne verrez donc peut-être pas cela comme un arrêt de SCNotification, mais comme un bug clr20r3. Dans cet article, nous explorerons toutes les étapes à suivre pour réparer SCNotification a cessé de fonctionner afin qu'il ne vous dérange plus. Qu'est-ce que SCNotification.e

Les utilisateurs de Microsoft Windows qui ont installé Microsoft.NET version 4.5.2, 4.6 ou 4.6.1 doivent installer une version plus récente de Microsoft Framework s'ils souhaitent que Microsoft prenne en charge le framework via de futures mises à jour de produit. Selon Microsoft, les trois frameworks cesseront de prendre en charge le 26 avril 2022. Une fois la date de support terminée, le produit ne recevra plus de « correctifs de sécurité ni de support technique ». La plupart des appareils domestiques sont tenus à jour grâce aux mises à jour Windows. Ces appareils disposent déjà de versions plus récentes de frameworks, telles que .NET Framework 4.8. Les appareils qui ne se mettent pas à jour automatiquement peuvent

Cela fait une semaine que nous parlions du nouveau bug du mode sans échec affectant les utilisateurs ayant installé KB5012643 pour Windows 11. Ce problème embêtant n'apparaissait pas sur la liste des problèmes connus publiée par Microsoft le jour du lancement, prenant ainsi tout le monde par surprise. Eh bien, juste au moment où vous pensiez que les choses ne pourraient pas empirer, Microsoft lâche une autre bombe pour les utilisateurs qui ont installé cette mise à jour cumulative. Windows 11 Build 22000.652 pose davantage de problèmes. La société de technologie avertit donc les utilisateurs de Windows 11 qu'ils pourraient rencontrer des problèmes lors du lancement et de l'utilisation de certaines applications .NET Framework 3.5. Cela vous semble familier ? Mais s'il te plaît, ne sois pas surpris

Comment utiliser l'ACL (AccessControlList) pour le contrôle des autorisations dans Zend Framework Introduction : Dans une application Web, le contrôle des autorisations est une fonction cruciale. Il garantit que les utilisateurs ne peuvent accéder qu'aux pages et fonctionnalités auxquelles ils sont autorisés à accéder et empêche tout accès non autorisé. Le framework Zend fournit un moyen pratique d'implémenter le contrôle des autorisations, en utilisant le composant ACL (AccessControlList). Cet article explique comment utiliser l'ACL dans Zend Framework.

Framework d'implémentation PHP : tutoriel d'introduction à ZendFramework ZendFramework est un framework de site Web open source développé par PHP et actuellement maintenu par ZendTechnologies. ZendFramework adopte le modèle de conception MVC et fournit une série de bibliothèques de code réutilisables pour servir l'implémentation d'applications Web2.0 et Web Serve. ZendFramework est très populaire et respecté par les développeurs PHP et propose une large gamme de

Selon les informations du 9 décembre, Cooler Master a récemment présenté un mini kit de châssis en coopération avec le fournisseur de solutions modulaires pour ordinateurs portables Framework lors d'un événement de démonstration au Taipei Compute Show. La particularité de ce kit est qu'il peut être compatible et installer la carte mère. à partir du cahier-cadre. Actuellement, ce produit a commencé à être vendu sur le marché, au prix de 39 dollars américains, ce qui équivaut à environ 279 yuans au taux de change actuel. Le numéro de modèle de ce kit de châssis est nommé « frameWORKMAINBOARDCASE ». En termes de design, il incarne le summum de la compacité et de la praticité, mesurant seulement 297x133x15 mm. Sa conception originale est de pouvoir se connecter de manière transparente aux notebooks framework
