我制作了一个控制器插件来处理身份验证。如果用户尝试访问页面而未登录,则会保存他尝试访问的页面路径,转发到登录页面,然后当用户登录时,会将其重定向到他试图去的地方
但是如果用户在注销时尝试访问不存在的页面,那么它仍会转发到登录表单,但是当用户登录时,会出现错误。
如何在用户登录前显示404错误?我想我需要在dispatchLoopStartup()中检测路由是否有效。我怎么做?还是有其他方法可以做到这一点吗?
class Chronos_Controller_Plugin_Auth extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$request->setParam('userName', $auth->getIdentity());
} else {
$request->setParam('origModule', $request->getModuleName())
->setParam('origController', $request->getControllerName())
->setParam('origAction', $request->getActionName())
->setModuleName('default')
->setControllerName('sign')
->setActionName('in');
}
}
}
答案 0 :(得分:2)
尝试这样的事情:
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$request->setParam('userName', $auth->getIdentity());
} else if ($dispatcher->isDispatchable($request)) {
$request->setParam('origModule', $request->getModuleName())
->setParam('origController', $request->getControllerName())
->setParam('origAction', $request->getActionName())
->setModuleName('default')
->setControllerName('sign')
->setActionName('in');
}
}