xxb/framework/router.class.php
2023-10-23 15:51:36 +08:00

149 lines
5.7 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* router类从baseRouter类集成而来您可以通过修改这个文件实现对baseRouter类的扩展。
* The router class extend from baseRouter class, you can extend baseRouter class by change this file.
*
* @package framework
*
* The author disclaims copyright to this source code. In place of
* a legal notice, here is a blessing:
*
* May you do good and not evil.
* May you find forgiveness for yourself and forgive others.
* May you share freely, never taking more than you give.
*/
define('FRAME_ROOT', dirname(__FILE__));
include FRAME_ROOT . '/base/router.class.php';
class router extends baseRouter
{
/**
* 创建一个应用。
* Create an application.
*
* @param string $appName 应用名称。 The name of the app.
* @param string $appRoot 应用根路径。The root path of the app.
* @param string $className 应用类名如果对router类做了扩展需要指定类名。When extends router class, you should pass in the child router class name.
* @static
* @access public
* @return object the app object
*/
public static function createApp($appName = 'demo', $appRoot = '', $className = '')
{
if(empty($className)) $className = __CLASS__;
return new $className($appName, $appRoot);
}
/**
* 加载模块的config文件返回全局$config对象。
* 如果该模块是common加载$configRoot的配置文件其他模块则加载其模块的配置文件。
*
* Load config and return it as the global config object.
* If the module is common, search in $configRoot, else in $modulePath.
*
* @param string $moduleName module name
* @param string $appName app name
* @param bool $exitIfNone exit or not
* @access public
* @return object|bool the config object or false.
*/
public function loadModuleConfig($moduleName, $appName = '')
{
global $config;
if($config and (!isset($config->$moduleName) or !is_object($config->$moduleName))) $config->$moduleName = new stdclass();
/* 初始化数组。Init the variables. */
$extConfigFiles = array();
$commonExtConfigFiles = array();
$siteExtConfigFiles = array();
/* 先获得模块的主配置文件。Get the main config file for current module first. */
$mainConfigFile = $this->getModulePath($appName, $moduleName) . 'config.php';
/* 查找扩展配置文件。Get extension config files. */
if($config->framework->extensionLevel > 0) $extConfigPath = $this->getModuleExtPath($appName, $moduleName, 'config');
if($config->framework->extensionLevel >= 1 and !empty($extConfigPath['common'])) $commonExtConfigFiles = helper::ls($extConfigPath['common'], '.php');
if($config->framework->extensionLevel == 2 and !empty($extConfigPath['site'])) $siteExtConfigFiles = helper::ls($extConfigPath['site'], '.php');
$extConfigFiles = array_merge($commonExtConfigFiles, $siteExtConfigFiles);
/* 将主配置文件和扩展配置文件合并在一起。Put the main config file and extension config files together. */
$configFiles = array_merge(array($mainConfigFile), $extConfigFiles);
/* 加载每一个配置文件。Load every config file. */
static $loadedConfigs = array();
foreach($configFiles as $configFile)
{
if(in_array($configFile, $loadedConfigs)) continue;
if(file_exists($configFile)) include $configFile;
$loadedConfigs[] = $configFile;
}
if($moduleName != 'common' and isset($config->system->$moduleName))
{
helper::mergeConfig($config->system->$moduleName, $moduleName);
}
if($moduleName != 'common' and isset($config->personal->$moduleName))
{
helper::mergeConfig($config->personal->$moduleName, $moduleName);
}
}
/**
* 加载语言文件,返回全局$lang对象。
* Load lang and return it as the global lang object.
*
* @param string $moduleName the module name
* @access public
* @return bool|object the lang object or false.
*/
public function loadLang($moduleName, $appName = '')
{
$lang = parent::loadLang($moduleName, $appName);
$customLang = array();
if(isset($lang->db->custom[$moduleName])) $customLang += $lang->db->custom[$moduleName];
foreach($customLang as $section => $fields)
{
if(empty($section))
{
foreach($fields as $key => $value)
{
if($moduleName == 'common')
{
unset($lang->{$key});
$lang->{$key} = $value;
}
else
{
if(!isset($lang->{$moduleName})) $lang->{$moduleName} = new stdclass();
unset($lang->{$moduleName}->{$key});
$lang->{$moduleName}->{$key} = $value;
}
}
}
else
{
foreach($fields as $key => $value)
{
if($moduleName == 'common')
{
unset($lang->{$section}[$key]);
$lang->{$section}[$key] = $value;
}
else
{
unset($lang->{$moduleName}->{$section}[$key]);
$lang->{$moduleName}->{$section}[$key] = $value;
}
}
}
}
$this->lang = $lang;
return $lang;
}
}