我一直在使用控制器plugin predispatch()
功能实现数据库驱动的ACL功能的处理。Zend Framework的错误与ACL
它工作正常。但它停止了在我的错误控制器上发送的请求。
,例如,如果指定的控制器/动作没有定义然后系统显示,而不是显示“请求/页面未找到”消息“拒绝访问”。
所以我的问题我怎么能同时实现ACL和错误使用predispatch()
方法在单插件处理。
请任何帮助。
我一直在使用控制器plugin predispatch()
功能实现数据库驱动的ACL功能的处理。Zend Framework的错误与ACL
它工作正常。但它停止了在我的错误控制器上发送的请求。
,例如,如果指定的控制器/动作没有定义然后系统显示,而不是显示“请求/页面未找到”消息“拒绝访问”。
所以我的问题我怎么能同时实现ACL和错误使用predispatch()
方法在单插件处理。
请任何帮助。
在你的控制器插件,如果必要的话重定向到错误控制:
$request
->setModuleName('default')
->setControllerName('error')
->setActionName('access')
->setDispatched(true);
的accessAction了,如果你想有一个专门的页面被放入错误控制,或者你可以简单地使用现有的errorAction
您应该在数据库中为错误控制器设置权限。
所以当前用户(角色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');
在资源表先插入,然后在允许表。
你应该让错误控制器默认为所有用户添加到您的ACL插件。
if (!$this->has('Default_Error')) {
$this->addResource('Default_Error');
$this->allow('guest', 'Default_Error');
}
这样每个人都可以看到错误控制器。
这不正是我想要的。我想你没有问我要问什么 – Lucifer
然后你的问题可能会被优化。 – Sven