Php Zend_Acl打开时如何处理异常?它提供了资源';默认::错误::错误';未找到';
我已经实现了Zend_Acl,它似乎正在工作。我的资源是链接: 模块名称。"::" . 控制器名称。"::" . 行动名称 我在我的代码中添加了一些破坏性的东西,似乎我被重定向到了通常的错误页面,但是Acl进来说 致命错误:未捕获的异常“Zend\u Acl\u exception”,在第365行的F:\work\php\zendworkspace\myproject\library\Zend\Acl.php中显示消息“Resource”default::error::error“not found” 我已经在参考资料中添加了Php Zend_Acl打开时如何处理异常?它提供了资源';默认::错误::错误';未找到';,php,zend-framework,exception,zend-acl,Php,Zend Framework,Exception,Zend Acl,我已经实现了Zend_Acl,它似乎正在工作。我的资源是链接: 模块名称。"::" . 控制器名称。"::" . 行动名称 我在我的代码中添加了一些破坏性的东西,似乎我被重定向到了通常的错误页面,但是Acl进来说 致命错误:未捕获的异常“Zend\u Acl\u exception”,在第365行的F:\work\php\zendworkspace\myproject\library\Zend\Acl.php中显示消息“Resource”default::error::error“not fou
default::error::error
,但错误仍然是一样的。
当我删除破坏整个程序的代码时,整个程序会再次运行。
因此,当代码中出现错误时,我肯定会遇到同样的错误
我想知道如何解决这个问题。感谢阅读并分享您的经验
编辑:
实现这一点的代码有点长。这是一个具有条令的db驱动ACL。
我已经修改以实现我的。我删除了myACL类,看起来和教程中的一样,ACL插件也差不多。我已经在application.ini中注册了它
// this class build all the roles and resouces and add 2 users to 2 differents roles and so on
class CMS_Util_AddResourcesAndRoles {
private $arrModules = array();
private $arrControllers = array();
public $arrActions = array();
private $arrIgnores = array('.', '..', '.svn');
public function BuildMCAArrays() {
$this->BuildModuleArray();
$this->BuildControllersArray();
$this->BuildActionArray();
return $this;
}
public function CheckData() {
if (count($this->arrModules) < 1)
throw new CMS_Exception_ResourceNotFound("No Modules found ..");
if (count($this->arrControllers) < 1)
throw new CMS_Exception_ResourceNotFound("No Controllers found ..");
if (count($this->arrActions) < 1)
throw new CMS_Exception_ResourceNotFound("No Actions found ..");
}
public function BuildModuleArray() {
$cmsApplicationModules = opendir(APPLICATION_PATH . DIRECTORY_SEPARATOR . 'modules');
while (false !== ($cmsFile = readdir($cmsApplicationModules))) {
if (!in_array($cmsFile, $this->arrIgnores)) {
if (is_dir(APPLICATION_PATH . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $cmsFile)) {
$this->arrModules[] = $cmsFile;
}
}
}
closedir($cmsApplicationModules);
return $this->arrModules;
}
public function BuildControllersArray() {
if (count($this->arrModules) > 0) {
foreach ($this->arrModules as $strModuleName) {
$cmsControllerFolder = opendir(APPLICATION_PATH . DIRECTORY_SEPARATOR . "modules" . DIRECTORY_SEPARATOR . $strModuleName . DIRECTORY_SEPARATOR . "controllers");
while (false !== ($cmsFile = readdir($cmsControllerFolder))) {
if (!in_array($cmsFile, $this->arrIgnores)) {
if (preg_match('/Controller/', $cmsFile)) {
// if(strtolower(substr($cmsFile, 0, -14)) != "error")
// $this->arrControllers[$strModuleName][] = strtolower(substr($cmsFile, 0, -14));
$this->arrControllers[$strModuleName][] = strtolower (substr($cmsFile, 0, -14));
}
}
}
closedir($cmsControllerFolder);
}
}
return $this->arrControllers;
}
private function BuildActionArray() {
// $arrMethods = array();
if (count($this->arrControllers) > 0) {
foreach ($this->arrControllers as $strModule => $strController) {
foreach ($strController as $strController) {
if ($strModule == "default") {
$strClassName = ucfirst($strController . 'Controller');
} else {
$strClassName = ucfirst($strModule) . '_' . ucfirst($strController . 'Controller');
}
if (!class_exists($strClassName)) {
Zend_Loader::loadFile(APPLICATION_PATH . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . $strModule . DIRECTORY_SEPARATOR . 'controllers' . DIRECTORY_SEPARATOR . ucfirst($strController) . 'Controller.php');
}
$objReflection = new Zend_Reflection_Class($strClassName);
$arrMethods = $objReflection->getMethods();
foreach ($arrMethods as $arrMethod) {
if (preg_match('/Action/', $arrMethod->name)) {
$this->arrActions[$strModule][$strController][] = substr($arrMethod->name, 0, -6);
// $this->arrActions[$strModule][$strController][] = substr($this->_camelCaseToHyphens($objMethods->name), 0, -6);
}
}
}
}
}
return $this->arrActions;
}
private function _camelCaseToHyphens($string) {
if ($string == 'currentPermissionsAction') {
$found = true;
}
$length = strlen($string);
$convertedString = '';
for ($i = 0; $i < $length; $i++) {
if (ord($string[$i]) > ord('A') && ord($string[$i]) < ord('Z')) {
$convertedString .= '-' . strtolower($string[$i]);
} else {
$convertedString .= $string[$i];
}
}
return strtolower($convertedString);
}
public function WriteResourcesToDb() {
$this->BuildMCAArrays();
$this->CheckData();
$resources = array();
foreach ($this->arrModules as $strModuleName) {
if (array_key_exists($strModuleName, $this->arrControllers)) {
foreach ($this->arrControllers[$strModuleName] as $strControllerName) {
if (array_key_exists($strControllerName, $this->arrActions[$strModuleName])) {
foreach ($this->arrActions[$strModuleName][$strControllerName] as $strActionName) {
$res = new CMS_Model_Resource();
$res->module_name = $strModuleName;
$res->controller_name = $strControllerName;
$res->action_name = $strActionName;
$res->name = $strModuleName . "_" . $strControllerName . "_" . $strActionName;
$resources[] = $res;
$this->PersistResource($resources);
}
}
}
}
}
return $this;
}
private function PersistResource(array $resourceobject) {
try {
$collection = new Doctrine_Collection("CMS_Model_Resource");
foreach ($resourceobject as $resource) {
$collection->add($resource);
}
$collection->save();
} catch (Exception $exc) {
echo $exc->getTraceAsString();
}
}
public function WriteRoleAndUserstoDb(){
$guest = new CMS_Model_Role();
$guest->name = "guest";
$guest->description = "simple user";
$guest->canbedeleted = true;
$member = new CMS_Model_Role();
$member->name = "member";
$member->description = "member with limited privileges,can access member reserved resources";
$member->canbedeleted = true;
$publisher = new CMS_Model_Role();
$publisher->name = "publisher";
$publisher->description = "publisher with publish an unpublished privileges";
$publisher->canbedeleted = true;
$manager = new CMS_Model_Role();
$manager->name = "manager";
$manager->description = "manager with privileges to publish, to unpublish, general manager of the site";
$manager->canbedeleted = true;
$admin = new CMS_Model_Role();
$admin->name = "administrator";
$admin->description = "admin with all privileges";
$admin->canbedeleted = false;
$superadmin = new CMS_Model_Role();
$superadmin->name = "superadmin";
$superadmin->description = "superadmin to rule them all";
$superadmin->canbedeleted = false;
$superadmin->Parents[0] = $admin;
$admin->Parents[0] = $manager;
$manager->Parents[0] = $publisher;
$publisher->Parents[0] = $member;
$member->Parents[0] = $guest;
$adminname = new CMS_Model_User();
$adminname->id = CMS_Util_Common::uuid();
$adminname->first_name = "adminname";
$adminname->last_name = "surname";
$adminname->full_name = "adminname surname";
$adminname->password = "password";
$adminname->email = "mister@somemail.com";
$adminname->is_active = true;
$adminname->is_verified = true;
$adminname->username ="superadmin";
$adminname->Role = $superadmin;
$adminname2 = new CMS_Model_User();
$adminname2->id = CMS_Util_Common::uuid();
$adminname2->first_name = "adminname2";
$adminname2->last_name = "adminsurname";
$adminname2->email="shallom@someemail.fr";
$adminname2->full_name = "adminname2 adminsurname";
$adminname2->password = "adminadmin";
$adminname2->is_active = true;
$adminname2->is_verified = true;
$adminname2->username ="admin";
$adminname2->Role = $admin;
$thepublisher = new CMS_Model_User();
$thepublisher->id = CMS_Util_Common::uuid();
$thepublisher->first_name = "one publisher";
$thepublisher->last_name = "lastname";
$thepublisher->full_name = "something something";
$thepublisher->email = "user@somegmail.com";
$thepublisher->password = "password";
$thepublisher->username = "publisher";
$thepublisher->is_active = true;
$thepublisher->is_verified = true;
$thepublisher->Role = $publisher;
$conn = Doctrine_Manager::getInstance()->getCurrentConnection();
$conn->flush();
return $this;
}
public function AssignResourcesToRoles(){
$guestcollection = new Doctrine_Collection("CMS_Model_RoleResource");
$guestroles = Doctrine_Core::getTable("CMS_Model_Role")->GetRoleByName("guest");
$defautresources = Doctrine_Core::getTable("CMS_Model_Resource")->GetResourceByModule("default");
foreach($defautresources as $resource){
$guestroleresource = new CMS_Model_RoleResource();
$guestroleresource->Role = $guestroles;
$guestroleresource->Resource = $resource;
$guestcollection->add($guestroleresource);
}
$guestcollection->save();
$admincollection = new Doctrine_Collection("CMS_Model_RoleResource");
$adminroles = Doctrine_Core::getTable("CMS_Model_Role")->GetRoleByName("superadmin");
$adminresources = Doctrine_Core::getTable("CMS_Model_Resource")->GetResourceByModule("admin");
foreach($adminresources as $resource){
$adminroleresource = new CMS_Model_RoleResource();
$adminroleresource->Role = $adminroles;
$adminroleresource->Resource = $resource;
$admincollection->add($adminroleresource);
}
$admincollection->save();
return $this;
}
public function SetAclUp(){
$this->WriteResourcesToDb();
$this->WriteRoleAndUserstoDb();
$this->AssignResourcesToRoles();
return $this;
}
}
//此类构建所有角色和资源,并将2个用户添加到2个不同的角色中,依此类推
类CMS_Util_addResources和角色{
私有$arrModules=array();
私有$arrControllers=array();
public$arrActions=array();
private$arrrignores=array('.','..','.svn');
公共函数buildMcArrays(){
$this->BuildModuleArray();
$this->BuildControllersArray();
$this->BuildActionArray();
退还$this;
}
公共函数CheckData(){
如果(计数($this->arrModules)<1)
抛出新的CMS_异常_ResourceNotFound(“未找到模块”);
如果(计数($this->arrControllers)<1)
抛出新的CMS_异常_ResourceNotFound(“未找到任何控制器”);
如果(计数($this->arrActions)<1)
抛出新的CMS\u异常\u ResourceNotFound(“未找到任何操作”);
}
公共函数BuildModuleArray(){
$cmsApplicationModules=opendir(应用程序路径目录分隔符'modules');
while(false!==($cmsFile=readdir($cmsApplicationModules))){
如果(!in_数组($cmsFile,$this->arrs)){
if(is_dir(应用程序_PATH.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$cmsFile)){
$this->arrModules[]=$cmsFile;
}
}
}
closedir($cmsApplicationModules);
返回$this->arr模块;
}
公共函数BuildControllersArray(){
如果(计数($this->arrModules)>0){
foreach($this->arrModules作为$strModuleName){
$cmsControllerFolder=opendir(应用程序路径。目录分隔符。“模块”。目录分隔符。$strModuleName。目录分隔符。“控制器”);
而(false!==($cmsFile=readdir($cmsControllerFolder))){
如果(!in_数组($cmsFile,$this->arrs)){
if(preg_匹配('/Controller/',$cmsFile)){
//if(strtolower(substr($cmsFile,0,-14))!=“error”)
//$this->arrControllers[$strModuleName][]=strtolower(substr($cmsFile,0,-14));
$this->arrControllers[$strModuleName][]=strtolower(substr($cmsFile,0,-14));
}
}
}
closedir($cmsControllerFolder);
}
}
返回$this->arlcontrollers;
}
私有函数BuildActionArray(){
//$arrMethods=array();
如果(计数($this->arrControllers)>0){
foreach($this->arrcontrolleras$strModule=>$strController){
foreach($strController作为$strController){
如果($strModule==“默认值”){
$strcassname=ucfirst($strController.Controller');
}否则{
$strcassname=ucfirst($strModule)。''''.ucfirst($strController.Controller');
}
如果(!class_存在($strClassName)){
Zend_Loader::loadFile(应用程序_PATH.DIRECTORY_SEPARATOR.'modules'.DIRECTORY_SEPARATOR.$strModule.DIRECTORY_SEPARATOR.'Controller.php');
}
$objReflection=新的Zend_反射_类($strClassName);
$arrMethods=$objReflection->getMethods();
foreach($arrMethods作为$arrMethod){
if(preg_match('/Action/',$arrMethod->name)){
$this->arrActions[$strModule][$strController][]=substr($arrMethod->name,0,-6);
//$this->arrActions[$strModule][$strController][]=substr($this->\u camelcasetohypens($objMethods->name),0,-6);
}
}
}
}
}
返回$this->arrActions;
}
私有函数\u camelcasetohypens($string){
如果($string=='currentPermissionsAction'){
$found=true;
}
$length=strlen($string);
$convertedString='';
对于($i=0;$i<$length;$i++){
if(ord($string[$i])>ord('A')&&ord($string[$i])buildMcArrays();
$this->CheckData();
$resources=array();
foreach($this->arrModules作为$strModuleName){
如果(数组\键\存在($strModuleName,$this->arrControllers)){
foreach($strControllerName)作为$strControllerName{
如果(array_key_存在($strControllerName,$this->arrActions[$strModuleName])){
foreach($strActionName时的this->arrActions[$strModuleName][$strControllerName]{
$res=新CMS_模型_资源();
$res->