Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_Acl打开时如何处理异常?它提供了资源';默认::错误::错误';未找到';_Php_Zend Framework_Exception_Zend Acl - Fatal编程技术网

Php Zend_Acl打开时如何处理异常?它提供了资源';默认::错误::错误';未找到';

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

我已经实现了Zend_Acl,它似乎正在工作。我的资源是链接:

模块名称。"::" . 控制器名称。"::" . 行动名称

我在我的代码中添加了一些破坏性的东西,似乎我被重定向到了通常的错误页面,但是Acl进来说

致命错误:未捕获的异常“Zend\u Acl\u exception”,在第365行的F:\work\php\zendworkspace\myproject\library\Zend\Acl.php中显示消息“Resource”default::error::error“not found”

我已经在参考资料中添加了
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->