如何避免将404重定向到Zend Framework 1控制器插件中的登录表单?

时间:2012-11-11 23:30:40

标签: zend-framework

我制作了一个控制器插件来处理身份验证。如果用户尝试访问页面而未登录,则会保存他尝试访问的页面路径,转发到登录页面,然后当用户登录时,会将其重定向到他试图去的地方

但是如果用户在注销时尝试访问不存在的页面,那么它仍会转发到登录表单,但是当用户登录时,会出现错误。

如何在用户登录前显示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');
        }
    }
}

1 个答案:

答案 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');
        }
    }