- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Zend Framework动作助手(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(),传入助手的名称即可.
1
2
3
|
$redirector
=
$this
->_helper->getHelper(
'Redirector'
);
//$redirector->getName();
$redirector
->gotoSimple(
'index2'
);
|
2.直接通过访问的_helper助手的属性对应的助手对象.
1
|
$redirector
=
$this
->_helper->Redirector;
|
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
|
<?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、注册一个助手 。
1. 。
1
|
Zend_Controller_Action_HelperBroker::addHelper(
$helper
);
|
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'
);
|
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'
);
|
2、判读助手是否存在 。
使用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'
;
}
|
从助手经纪人中获取助手有两个静态方法: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'
);
}
|
3、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'
)
}
|
希望本文所述对大家PHP程序设计有所帮助.
最后此篇关于Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解的文章就讲到这里了,如果你想了解更多关于Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
最近我在用 RestSharp消耗我的 Restful 资源。并期望在服务器和客户端之间与 JSon 交换数据。下面是我的 C# 代码。 var client = new RestSharp.Rest
我正在阅读 Bartosz Milewski 的一篇文章,其中他定义了以下函数: instance Applicative Chan where pure x = Chan (repeat x)
‘…' 其实是go的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 实例:
前言 在算face_track_id map有感: 开始验证 data={"state":[1,1,2,2,1,2,2,2],"pop":[&quo
本文实例讲述了php访问数组最后一个元素的函数end()用法。分享给大家供大家参考。具体分析如下: end()函数在PHP中用于检索数组中的最后一个元素。end()函数需要一个数组作为其唯一参数,
我使用的是 jdk1.8.0_92。我的虚拟机如下所示。 $java -version java version "1.8.0_92" Java(TM) SE Runtime Environment
我的情况是我需要将所有匹配 http://mywebsite.com/portfolio/[anyname] 的请求定向到 http://mywebsite.com/portfolio.php?用户名
我正在尝试在 NLTK 中使用语音标记并使用了以下命令: >>> text = nltk.word_tokenize("And now for something completely differe
#include typedef QList IntList; qRegisterMetaType("IntList"); error C2909: 'qRegisterMetaType':
来自 here我知道 BN_CTX 是一个保存 BIGNUM 临时变量的结构。这些 BIGNUM 变量什么时候会进入 BN_CTX 的 BN_POOL?如果我有一个 bignum_ctx BN_CTX
尝试为 ABPersonRef 创建对象例子:ABpersonRef 引用; 已包含Addressbook和AddressBookUI框架即使这样,当我编译时,它仍显示“ABPersonRef”未声明
我无法使用 GetAltTabInfo。可能是一个愚蠢的错误,但这有什么问题呢? HWND taskSwitcher = FindWindow(L"TaskSwitcherWnd", L"Task S
JSLint4Java 是 JSLint 的 Java 包装器。我需要这样的东西在我的 GWT 项目中使用,但使用 JSLint4Java 的唯一方法似乎是从命令行或通过 ANT 任务。有谁知道是否有
我有一个持久化实体对象的方法 persistData() 。我有另一个方法 findData() ,它对同一实体类执行 find() 操作以获取持久的主键值。当我在实体类的@PostPersist中调
下面是我的代码。请查看。 1. bool isUnavailable = db.Deploys.Where(p => p.HostEnvironmentId == Guid.Parse(h
这个问题已经有答案了: Why can't a Generic Type Parameter have a lower bound in Java? (6 个回答) 已关闭 9 年前。 我试图理解为什
我正在尝试使用 scala 编译器 Y 警告,但我认为我做得不对。在下面的示例中,nums 未使用,因此我希望 -Ywarn-value-discard 打印一个警告。有两个 if 条件,一个嵌套在另
用户被要求从某个给定的集合中选择一个 ID。我检查该 ID 是否存在于我的集合中,如果不存在,我会抛出 IndexOutOfBoundsException 并稍后捕获它。我实际上可以使用该异常来达到这
我正在尝试减少从 OSM 路径数据生成的形状文件。我正在使用 VTS 的 DouglasPeuckerSimplifier 实现。我想为特定 GTFS(通用交通提要规范)构建路线图的 geojson。
我明白了?!是排除某个模式,例如 a(?!b) 表示如果“a”后面没有“b”,它将匹配“a”。我的问题是,假设我有一个包含以下内容的文件: a cat is a cat, a dog is a dog
我是一名优秀的程序员,十分优秀!