Home php教程 php手册 Zend Framework动作助手(Zend_Controller_Action_Helper)用法详

Zend Framework动作助手(Zend_Controller_Action_Helper)用法详

Jun 06, 2016 pm 07:33 PM
framework zend action assistant

本文实例讲述了Zend Framework动作助手(Zend_Controller_Action_Helper)用法。分享给大家供大家参考,具体如下: 通过助手模式,可以把一些经常使用的功能模块做封装,从而在可以在需要的地方灵活使用,主要是在action使用。 Zend Framework中有两种助手,动

本文实例讲述了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(),传入助手的名称即可。

1

2

3

$redirector = $this->_helper->getHelper('Redirector');

//$redirector->getName();

$redirector->gotoSimple('index2');

Copy after login

2.直接通过访问的_helper助手的属性对应的助手对象

1

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

Copy after login

Zend_Controller_Action_HelperBroker

中文名称译作"助手经纪人",顾名思义,是动作助手的中间人。

在动作的实例化使用的方式的第二种方式就是通过Zend_Controller_Action_HelperBroker的魔术方法__get()来实现的。

助手经纪人用于注册助手对象和助手路径以及获取助手等等功能。

Zend_Controller_Action_HelperBroker的实现以及常用方法列表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

<&#63;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&#63;

   *

   * @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);

  }

}

Copy after login

助手经纪人的常见用法:

一、注册一个助手

1.

1

Zend_Controller_Action_HelperBroker::addHelper($helper);

Copy after login

2.通过addPrefix()方法带有一个类前缀参数,用来加入自定义助手类的路径。
要求前缀遵循Zend Framework的类命名惯例。

1

2

// Add helpers prefixed with My_Action_Helpers in My/Action/Helpers/

Zend_Controller_Action_HelperBroker::addPrefix('My_Action_Helpers');

Copy after login

3.使用addPath()方法第一个参数为一个目录,第二个为类前缀(默认为'Zend_Controller_Action_Helper')。

用来将自己的类前缀映射到指定的目录。

1

2

3

// Add helpers prefixed with Helper in Plugins/Helpers/

Zend_Controller_Action_HelperBroker::addPath('./Plugins/Helpers',

                       'Helper');

Copy after login

二、判读助手是否存在

使用hasHelper($name)方法来判定助手经纪人中是否存在某助手,$name是助手的短名称(去掉前缀的):

1

2

3

4

// Check if 'redirector' helper is registered with the broker:

if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {

  echo 'Redirector helper registered';

}

Copy after login

从助手经纪人中获取助手有两个静态方法:getExistingHelper() 和 getStaticHelper() 。getExistingHelper()将获取助手仅当它以前调用过或者显性地通过助手经纪人注册过,否则就抛出一个异常。getStaticHelper() 的做法和getExistingHelper()一样,但如果还没有注册助手堆栈,它将尝试初始化助手,为获取你要配置的的助手,getStaticHelper()是一个好的选择。

两个方法都带一个参数,$name,它是助手的短名称(去掉前缀)。

1

2

3

4

5

6

7

8

9

10

// 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');

}

Copy after login

三、removeHelper($name)删除助手经纪人中的某个助手,$name是助手的短名称

1

2

3

4

// Conditionally remove the 'redirector' helper from the broker:

if (Zend_Controller_Action_HelperBroker::hasHelper('redirector')) {

  Zend_Controller_Action_HelperBroker::removeHelper('redirector')

}

Copy after login

更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1654
14
PHP Tutorial
1251
29
C# Tutorial
1225
24
Microsoft NET Framework Installation Issues Error Code 0x800c0006 Fix Microsoft NET Framework Installation Issues Error Code 0x800c0006 Fix May 05, 2023 pm 04:01 PM

.NET Framework 4 is required by developers and end users to run the latest versions of applications on Windows. However, while downloading and installing .NET Framework 4, many users complained that the installer stopped midway, displaying the following error message - " .NET Framework 4 has not been installed because Download failed with error code 0x800c0006 ". If you are also experiencing it while installing .NETFramework4 on your device then you are at the right place

How to identify Windows upgrade issues using SetupDiag on Windows 11/10 How to identify Windows upgrade issues using SetupDiag on Windows 11/10 Apr 17, 2023 am 10:07 AM

Whenever your Windows 11 or Windows 10 PC has an upgrade or update issue, you will usually see an error code indicating the actual reason behind the failure. However, sometimes confusion can arise when an upgrade or update fails without an error code being displayed. With handy error codes, you know exactly where the problem is so you can try to fix it. But since no error code appears, it becomes challenging to identify the issue and resolve it. This will take up a lot of your time to simply find out the reason behind the error. In this case, you can try using a dedicated tool called SetupDiag provided by Microsoft that helps you easily identify the real reason behind the error.

The new production information of the new open world game 'Wang Yue' has been released: a new world emerges in 48 Days The new production information of the new open world game 'Wang Yue' has been released: a new world emerges in 48 Days Feb 07, 2024 pm 03:36 PM

The two-dimensional open world action game "Wang Yue" owned by Shiyue Network recently released a new production information "48 Days Lives a New World", which introduced a series of optimization content of 48 Days since the last time it released production information, mainly the game screen. Iteration on performance. Among them, the display of the character UI interface has aroused heated discussions among many players, saying that it looks very familiar. Perhaps this kind of character display with multiple lenses running smoothly is becoming a new trend. Producer Hua Tao previously stated that the game has been in production for more than two years and will start its first test in the first quarter of 2024. Yesterday, the official also released a reservation video ""It seems like a pleasant afternoon"". It must be that the first test is not far away.

SCNotification has stopped working [5 steps to fix it] SCNotification has stopped working [5 steps to fix it] May 17, 2023 pm 09:35 PM

As a Windows user, you are likely to encounter SCNotification has stopped working error every time you start your computer. SCNotification.exe is a Microsoft system notification file that crashes every time you start your PC due to permission errors and network failures. This error is also known by its problematic event name. So you might not see this as SCNotification having stopped working, but as bug clr20r3. In this article, we will explore all the steps you need to take to fix SCNotification has stopped working so that it doesn’t bother you again. What is SCNotification.e

Microsoft .NET Framework 4.5.2, 4.6, and 4.6.1 will end support in April 2022 Microsoft .NET Framework 4.5.2, 4.6, and 4.6.1 will end support in April 2022 Apr 17, 2023 pm 02:25 PM

Microsoft Windows users who have installed Microsoft.NET version 4.5.2, 4.6, or 4.6.1 must install a newer version of the Microsoft Framework if they want Microsoft to support the framework through future product updates. According to Microsoft, all three frameworks will cease support on April 26, 2022. After the support date ends, the product will not receive "security fixes or technical support." Most home devices are kept up to date through Windows updates. These devices already have newer versions of frameworks installed, such as .NET Framework 4.8. Devices that are not updating automatically may

The classic 3D action online game 'Dragon Nest' will be launched on the Steam platform soon, and will only support the Chinese version. The classic 3D action online game 'Dragon Nest' will be launched on the Steam platform soon, and will only support the Chinese version. Jan 15, 2024 am 08:54 AM

The classic online game "Dragon Nest" is about to be launched on Steam. The store page is currently online. The publisher is Shengqu Games. The planned release date will be announced soon. The language only supports Chinese. "Dragon Nest" is a 3D lock-free innovative competitive online game. With its unique operation method, dreamy game graphics, refreshing combo battles and intense PVP experience, it has become an action-adventure game loved by Valley fans.

How to obtain the three actions of the eternal calamity subject How to obtain the three actions of the eternal calamity subject Mar 10, 2024 pm 12:37 PM

There are various actions that can be obtained in Eternal Calamity. Players can use these actions when playing the game. There is a subject three action in the game that can be obtained. After the player obtains it, he can use this action to jump to subject three. This time we will also introduce the specific method of obtaining this action, so you can take a look. How to obtain the three actions of Eternal Calamity Subject 1. First enter the game, find the mall in the game interface, and click to enter. 2. Then check the new products in the mall and find the action called [Silk Smooth Combo]. This action is the third action. 3. The original price of the action is 1,000 gold bricks, and it is 500 gold bricks when it is discounted. Players can get this action after purchasing it. 4. After the purchase is successful, you can get this action.

PHP Implementation Framework: Zend Framework Getting Started Tutorial PHP Implementation Framework: Zend Framework Getting Started Tutorial Jun 19, 2023 am 08:09 AM

PHP implementation framework: ZendFramework introductory tutorial ZendFramework is an open source website framework developed by PHP and is currently maintained by ZendTechnologies. ZendFramework adopts the MVC design pattern and provides a series of reusable code libraries to serve the implementation of Web2.0 applications and Web Serve. ZendFramework is very popular and respected by PHP developers and has a wide range of

See all articles