Zend Framework 默认包含了许多action helper:
- AutoComplete用来自动response AJAX autocompletion;
- ContextSwitch和AjaxContext服务于你的actions的交替response格式;
- FlashMessenger用来处理session flash messages;
- Json用来encoding和发送JSON response;
- Redirector提供不同的实现方法来重定向到你的应用中的不同的页面(这里也就是说$this->redirect());
- ViewRenderer用来自动化设置view object给你的controller和rendering views。
ActionStack
*ActionStack*helper允许你push requests给ActionStack front controller plugin,非常有效的帮助你在执行request时创建一个actions队列。这个helper允许你通过指定一个新的request或action-controller-module set的方式添加actions。
My comprehension
也就是说这个ActionStack可以用来控制action的访问的,也就是在controller里面的Action方法中让它也能用上其他action里面的功能,在功能都一样的情况下,就没必要多写一遍,使用这个方法就可以很好来在action里请求别的action。下面上代码(Zend文档里面的)
Example#1Adding a Task Using Action, Controller and Module Names
这就和Zend_Controller_Action::_forward()是一样的
class FooController extends Zend_Controller_Action
{
public function barAction()
{
// Add two actions to the stack
// Add call to /foo/baz/bar/baz
// (FooController::bazAction() with request var bar == baz)
$this->_helper->actionStack('baz',
'foo',
'default',
array('bar' => 'baz'));
// Add call to /bar/bat
// (BarController::batAction())
$this->_helper->actionStack('bat', 'bar');
}
}
Example #2 Adding a Task Using a Request Object
有时候OOP特性中的request object非常有意义;你也可以通过object的方法发送给ActionStack
class FooController extends Zend_Controller_Action
{
public function barAction()
{
// Add two actions to the stack
// Add call to /foo/baz/bar/baz
// (FooController::bazAction() with request var bar == baz)
$request = clone $this->getRequest();
// Don't set controller or module; use current values
$request->setActionName('baz')
->setParams(array('bar' => 'baz'));
$this->_helper->actionStack($request);
// Add call to /bar/bat
// (BarController::batAction())
$request = clone $this->getRequest();
// don't set module; use current value
$request->setActionName('bat')
->setControllerName('bar');
$this->_helper->actionStack($request);
}
}