3

每当一个控制器被调用,如果它没有在 zend acl 中注册,那么我们通常会得到这样的错误

Fatal error: Uncaught exception 'Zend_Acl_Exception' with message 
'Resource 'hsfasfdadsf' not found' in /usr/share/php/libzend-framework-php/Zend/Acl.php:365
Stack trace: 
#0 /var/www/update/library/Management/Access.php(55): Zend_Acl->get('hsfasfdadsf') 
#1 /usr/share/php/libzend-framework-php/Zend/Controller/Plugin/Broker.php(309): Management_Access->preDispatch(Object(Zend_Controller_Request_Http)) 
#2 /usr/share/php/libzend-framework-php/Zend/Controller/Front.php(941):

没有办法检查控制器和动作是否在zend acl中注册,我试过了

if(!$acl->get($controller))
{
    $request->setControllerName('error');
    $request->setActionName('notfound');
}

但没有工作

4

1 回答 1

6

第一个解决方案:

避免那些例外,例如

if (!$acl->has($your_resource)) {
   // .. handle it the way you need
}

第二个

在 ErrorController 中处理这些异常,即:

if ($errors->exception instanceof Zend_Acl_Exception) {
    // send needed headers...
    // prepare log message...
    // render info: resource_not_found.phtml
    $this->_helper->viewRenderer('resource_not_found');
}
于 2011-01-27T19:46:03.173 回答