2

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

但是如果用户在退出时试图访问一个不存在的页面,那么它仍然会转发到登录表单,但是当用户登录时,它会带来一个错误。

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

1 回答 1

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');
        }
    }
于 2012-11-12T09:05:32.753 回答