【问题标题】:Zend framework Error handling with ACLZend 框架 使用 ACL 处理错误
【发布时间】:2013-12-11 16:42:27
【问题描述】:

我已经使用控制器 plugin predispatch() 函数实现了数据库驱动的 ACL 功能。

一切正常。但它停止了在我的错误控制器上发送的请求。

例如,如果未定义指定的控制器/操作,则系统将显示消息“拒绝访问”而不是显示“未找到请求/页面”。

所以我的问题是如何使用predispatch() 方法在单个插件中实现 ACl 和错误处理。

请帮忙。

【问题讨论】:

    标签: php zend-framework error-handling acl


    【解决方案1】:

    在您的控制器插件中,如有必要,重定向到错误控制器:

    $request
      ->setModuleName('default')
      ->setControllerName('error')
      ->setActionName('access')
      ->setDispatched(true);
    

    如果你想要一个特殊的页面,必须将 accessAction 放入错误控制器,或者你可以简单地使用现有的 errorAction

    【讨论】:

    • 这不是我想要的。我想你没有明白我在问什么
    • 那么你的问题可能会被优化。
    【解决方案2】:

    您应该在数据库中设置错误控制器的权限。

    所以当前用户(角色 id)应该有权访问错误控制器。

    我不知道你是数据库表的结构,但以我的方式(可能是相似的):

    INSERT INTO "resources" ("id","name","description") VALUES (11,'error', 'Error controller');
    INSERT INTO "permissions" ("role_id", "resource_id", "is_allowed") VALUES (1, 11, 't');
    

    先插入资源表,再插入权限表。

    【讨论】:

      【解决方案3】:

      默认情况下,您应该为所有用户将错误控制器添加到 ACL 插件中。

      if (!$this->has('Default_Error')) {
          $this->addResource('Default_Error');
          $this->allow('guest', 'Default_Error');
      }
      

      这样每个人都可以看到错误控制器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 2012-02-16
        相关资源
        最近更新 更多