Zend Framework:preDispatch ACL插件导致对不存在的页面的请求为Access Denied而不是404

Jie*_*eng 5 php acl zend-framework

我为我的ACL设置了一个preDispatch插件.我已将控制器用作资源,将操作用作特权.当我尝试转到一个不存在的页面时,我进入拒绝访问页面而不是404,我认为因为查询了资源和权限,因为找不到它们,所以它会进入拒绝访问页面...

我怎样才能解决这个问题?也许我的实现插件的方法是错的?我可以以某种方式检查现有资源b4我的acl插件运行吗?\

更新

插件代码@ pastebin

zwi*_*pie 4

我遇到了同样的问题并将其添加到preDispatch函数中(虽然使用模块,但这是$acl->has()有趣的函数):

if (!$acl->has($request->module . '_' . $request->controller)) {
    // action/resource does not exist in ACL
    $request->setModuleName('default');
    $request->setControllerName('error');
    $request->setActionName('notfound');
} else {
    // resource does exist, check ACL
    if (!$acl->isAllowed($role, $module . '_' . $controller, $action)) {
        $request->setControllerName('user');
        $request->setActionName('login');
    }
}
Run Code Online (Sandbox Code Playgroud)