SRBAC.Components.Helper中查询模块方法的问题及完善

srbac版本:srbac_1.2

原SRBAC.Components.Helper.php文件中的以下两个方法:

/**
 * Find a module searching in application modules and if it's not found there
 * looks in modules' modules
 * @param String $moduleID The model to find
 * @return The module, if it's found else null
 */
public static function findModule($moduleID) {
  if (Yii::app()->getModule($moduleID)) {
    return Yii::app()->getModule($moduleID);
  }
  $modules = Yii::app()->getModules();
  foreach ($modules as $mod=>$conf) {
    if (Yii::app()->getModule($mod)) {
      return self::findInModule(Yii::app()->getModule($mod), $moduleID);
    }
  }
  return null;
}

/**
 * Search for a child module
 * @param String $parent The parent module
 * @param String $moduleID The module to find
 * @return The module, if it's not found returns null
 */
private static function findInModule($parent, $moduleID) {
  if ($parent->getModule($moduleID)) {
    return $parent->getModule($moduleID);
  } else {
    $modules = $parent->getModules();
    foreach ($modules as $mod => $conf) {
      return $this->findInModule($parent->getModule($mod), $moduleID);
    }
  }
  return null;
}

在遍历子模块时,个人认为有问题。将以上方法改为如下:

/**
* Find a module searching in application modules and if it's not found there
* looks in modules' modules
* @param String $moduleID The model to find
* @return The module, if it's found else null
*/
public static function findModule($moduleID)
{
	if (Yii::app()->getModule($moduleID))
		return Yii::app()->getModule($moduleID);
	$modules = Yii::app()->getModules();
	foreach ($modules as $mod=>$conf) {
		$module=Yii::app()->getModule($mod);
		if ($module)
		{
			$childModule=self::findInModule($module, $moduleID);
			if($childModule!==null)
				return $childModule;
		}
	}
	return null;
}

/**
* Search for a child module
* @param String $parent The parent module
* @param String $moduleID The module to find
* @return The module, if it's not found returns null
*/
private static function findInModule($parent, $moduleID)
{
	if ($parent->getModule($moduleID))
		return $parent->getModule($moduleID);
	else
	{
		$modules = $parent->getModules();
		foreach ($modules as $mod => $conf){
			$module=$parent->getModule($mod);
			if ($module) {
				$childModule=self::findInModule($module, $moduleID);
				if($childModule!==null && $module->id.'/'.$moduleID==$childModule->id)
					return $childModule;
			}
		}
	}
	return null;
}

你可能感兴趣的:(YiiFramewok)