我喜欢
<?php
class AccountController extends Zend_Controller_Action
{
public function init()
{
if(!Zend_Auth::getInstance()->hasIdentity()) {
//need to forward to the auth action in another controller,
//instead of dispatching to whatever action it would be dispatched to
}
}
...
我不能使用$ this-&gt; _forward(“action”),因为auth操作不在同一个控制器中,而在init中,转发必须是在同一个控制器中的操作。有什么想法吗?
$request->setModuleName('module')
->setControllerName('controller')
->setActionName('action');
也行不通。我试图清除这些参数,但我仍然没有。
答案 0 :(得分:5)
class My_Auth_Plugin extends Zend_Controller_Plugin_Abstract
{
public function preDispatch($request)
{
if(!Zend_Auth::getInstance()->hasIdentity()) {
$request->setModuleName('module')
->setControllerName('controller')
->setActionName('action');
}
}
}
您可能想要重定向而不是“转发”,您可以使用重定向器帮助程序。
$this->_helper->redirector('action', 'controller', 'module');
请注意,这是重定向器帮助程序的基本用法,您可能还希望使用goToRoute()方法,该方法允许您使用自定义路由。
这是方法的签名:
public function gotoRoute(array $urlOptions = array(), $name = null,
$reset = false, $encode = true)
用法类似于视图助手url()
答案 1 :(得分:2)
_forward有多个参数。
$this->_forward($action, $controller, $module, $params)
如果controller为null,则action将在被调用的控制器内。如果module为null,则控制器将在被调用的模块中。
param是一个参数数组。我倾向于通过$this->_request->getParams()
。