我正在爲我的應用程序創建一個ACL。但我似乎無法找到錯誤的地方。由於它是一個簡單的ACL,我不認爲在這裏很難找到問題。我收到以下錯誤: 致命錯誤:Zend_Acl_Role_Registry_Exception:在/usr/local/zend/share/ZendFramework/library/Zend/View/Helper/Navigation/HelperAbstract.php上找不到角色'secretaria'522行 並且在此處是我的代碼(下面)。如果有人可以幫助我找到哪裏錯誤,我會明白。Zend_Acl註冊表
<?php
class Plugins_acl extends Zend_Controller_Plugin_Abstract{
//NOME DOS RESOURCES
//private $modules = array();
//private $perfils = array();
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$acl = new Zend_Acl();
//create the user roles
//1-ADMINISTRADOR
//2-MEDICO
//3- ASSISTENTE
//4- SECREATRIA
$acl->addRole(new Zend_Acl_Role('administrador'));
$acl->addRole(new Zend_Acl_Role('medico'));
$acl->addRole(new Zend_Acl_Role('assistente'));
$acl->addRole(new Zend_Acl_Role('secretaria'));
$acl->addRole(new Zend_Acl_Role('guest'));
//create the resources
$acl->addResource(new Zend_Acl_Resource('index'));
$acl->addResource(new Zend_Acl_Resource('error'));
$acl->addResource(new Zend_Acl_Resource('dashboard'));
$acl->addResource(new Zend_Acl_Resource('login'));
$acl->addResource(new Zend_Acl_Resource('default'));
$acl->allow(null,'index');
$acl->allow('secretaria','dashboard');
$acl->allow('secretaria','index');
$acl->allow('secretaria','default');
$acl->allow('guest','login');
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity())
{
$identity = $auth->getIdentity();
$role = strtolower($identity['role']);
}
else
{
$role = 'guest';
}
$controller = $request->controller;
$action = $request->action;
$module= $request->module;
if(!$acl->isAllowed($role, $module))
{
if('guest' == $role)
{
$request->setModuleName('auth');
$request->setControllerName('login');
$request->setActionName('index');
}
else
{
$request->setModuleName('error');
$request->setControllerName('error');
$request->setActionName('notauthorized'); }
}
}
}
這裏我的代碼導航
public function _initNavigation()
{
$this->acl = Zend_Registry::get('acl');
$this->bootstrap('layout');
$this->role = Zend_Auth::getInstance()->getStorage()->read();
$layout = $this->getResource('layout');
$view = $layout->getView();
$navConfig = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation= new Zend_Navigation($navConfig);
$view->navigation($navigation)->setAcl($this->acl)->setRole($this->role['Role']);
}
問題在這一點上是註冊表中沒有發現ACL;加載它不知道角色等導航因此,當.. 。
<?php
類Plugins_acl延伸Zend_Controller_Plugin_Abstract {
//NOME DOS RESOURCES
//private $modules = array();
//private $perfils = array();
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$acl =new Zend_Acl();
//create the user roles
//1-ADMINISTRADOR
//2-MEDICO
//3- ASSISTENTE
//4- SECREATRIA
$acl->addRole(new Zend_Acl_Role('administrador'));
$acl->addRole(new Zend_Acl_Role('medico'));
$acl->addRole(new Zend_Acl_Role('assistente'));
$acl->addRole(new Zend_Acl_Role('secretaria'));
$acl->addRole(new Zend_Acl_Role('guest'));
//create the resources
$acl->addResource(new Zend_Acl_Resource('index'));
$acl->addResource(new Zend_Acl_Resource('error'));
$acl->addResource(new Zend_Acl_Resource('dashboard'));
$acl->addResource(new Zend_Acl_Resource('login'));
$acl->addResource(new Zend_Acl_Resource('default'));
$acl->allow(null,'index','index');
$acl->allow('secretaria','dashboard');
$acl->allow('secretaria','index');
$acl->allow('secretaria','default');
$acl->allow('guest','login');
Zend_Registry::set('Zend_Acl', $acl);
$auth = Zend_Auth::getInstance();
$roleUser = Zend_Auth::getInstance()->getStorage()->read();
Zend_Registry::set('Zend_Acl_Role', $roleUser['Role']);
if($auth->hasIdentity())
{
$identity = $auth->getIdentity($roleUser['Role']);
$role = strtolower($identity['Role']);
}
else
{
$role = 'guest';
}
$controller = $request->controller;
$action = $request->action;
$module= $request->module;
if(!$acl->isAllowed($role, $module))
{
if('guest' == $role)
{
$request->setModuleName('auth');
$request->setControllerName('login');
$request->setActionName('index');
}
else
{
$request->setModuleName('error');
$request->setControllerName('error');
$request->setActionName('notauthorized'); }
}
/*
$this->modules = $aclNs->resources['modules'];
$this->perfils = $aclNs->resources['perfils'];
$this->modules[]= 'default';
$this->modules[]= 'logout';
$this->modules[]= 'login';
$this->modules[]= 'error';
$this->modules[]= 'index';
$this->modules[]= 'gerenciar';
*/
}
}
我認爲錯誤是從當我建立了Zend導航地方找不到的作用「secretaria」未來 ?我怎樣才能爲ACL中的註冊表在引導水平,所以我可以通過到zend導航。 順便說一句,我仍然得到相同的錯誤。 – user1960170
我也遇到這種情況:致命錯誤:未捕獲的異常'Zend_Exception'帶有消息'沒有條目註冊的密鑰'Zend_Acl'When我打電話到_initNavigation() – user1960170
@ user1960170請更新您的問題併發布'_initNavigation' – bitWorking