@Chiang
2020-03-28T19:53:44.000000Z
字数 3526
阅读 543
doitphp
2020-03
doitphp_standard/doitphp/DoitPHP.php
主要是配置环境参数
根据路由参数获取实例化controller类的action方法
实现controller类方法的内容
if (!defined('IN_DOIT')) {
exit();
}
/**
* 定义目录分隔符
*/
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
/**
* 定义DoitPHP项目的基本路径
*/
if (!defined('APP_ROOT')) {
define('APP_ROOT', dirname(__FILE__) . DS . '..');
}
/**
* 定义DoitPHP框架文件所在路径
*/
if (!defined('DOIT_ROOT')) {
define('DOIT_ROOT', dirname(__FILE__));
}
/**
* 项目执行
*
* 供项目入口文件所调用,用于启动框架程序运行
*
* @access public
*
* @param string $configFilePath 配置文件的路径
*
* @return object
*/
public static function run($configFilePath = null) {
//初始化运行环境
self::_init($configFilePath);
return self::_createWebApplication(Router::getRequest());
}
doitphp_standard/application/config/application.php
- 定义路由格式
- 是否开启路由重写
- 是否开启Debug调试
- 是否开启日志记录
- 定义项目路径
- 定义缓存路径
- 定义日志路径
- 设置视图文件格式
- 配置数据库参数
- 设置cookie生命周期
- 设置session生命周期
private static function _init($filePath = null)
//加载对配置文件管理的类文件
self::loadFile(DOIT_ROOT . '/core/Configure.php');
//加载路由网址分析的类文件
self::loadFile(DOIT_ROOT . '/core/Router.php');
//加载Controller基类
self::loadFile(DOIT_ROOT . '/core/Controller.php');
public static function loadFile($filePath) {
//参数分析
if (!$filePath) {
return false;
}
//判断文件有没有加载过,加载过的直接返回true
if (!isset(self::$_incFiles[$filePath])) {
//分析文件是不是真实存在,若文件不存在,则只能...
if (!is_file($filePath)) {
//当所要加载的文件不存在时,错误提示
Response::halt('The File: ' . $filePath . ' is not found!');
}
include_once $filePath;
self::$_incFiles[$filePath] = true;
}
return self::$_incFiles[$filePath];
}
Response 类会通过
AutoLoad.php
类文件自动加载
//加载并分析项目的主配置文件
Configure::loadConfig($filePath);
//定义是否开启调试模式。开启后,程序运行出现错误时,显示错误信息,便于程序调试。
if (!defined('DOIT_DEBUG')) {
define('DOIT_DEBUG', Configure::get('application.debug'));
}
self::_createWebApplication(Router::getRequest());
//参数分析
if (!$routerInfo || !is_array($routerInfo)) {
return false;
}
//定义变量_app
static $_app = array();
self::$_controller = ucfirst($routerInfo['controller']);
self::$_action = strtolower($routerInfo['action']);
private static function _createWebApplication($routerInfo) {
//参数分析
if (!$routerInfo || !is_array($routerInfo)) {
return false;
}
//定义变量_app
static $_app = array();
self::$_controller = ucfirst($routerInfo['controller']);
self::$_action = strtolower($routerInfo['action']);
$appId = self::$_controller . '-' . self::$_action;
if (!isset($_app[$appId])) {
//通过实例化及调用所实例化对象的方法,来完成controller中action页面的加载
$controller = self::$_controller . 'Controller';
$action = self::$_action . 'Action';
//分析Controller子目录的情况。注:controller文件的命名中下划线'_'相当于目录的'/'。
if (strpos($controller, '_') !== false) {
//当controller名中含有'_'字符时,将'_'替换为路径分割符。如:"/" 或 "\"
$childDirArray = explode('_', strtolower(self::$_controller));
$tagFileName = ucfirst(array_pop($childDirArray));
$childDirName = implode(DS, $childDirArray);
$tagFileName = $childDirName . DS . $tagFileName . 'Controller';
} else {
$tagFileName = $controller;
}
//分析controller文件的路径
$controllerFilePath = BASE_PATH . '/controllers/' . $tagFileName . '.php';
if (!is_file($controllerFilePath)) {
//当controller名称中不含有'_'字符时
self::_show404Error();
}
//当文件在controller根目录下存在时,直接加载。
self::loadFile($controllerFilePath);
//创建一个页面控制器对象(Controller Object)
$appObject = new $controller();
if (method_exists($controller, $action)){
$_app[$appId] = $appObject->$action();
} else {
//所调用方法在所实例化的对象中不存在时
self::_show404Error();
}
}
return $_app[$appId];
}
/**
* 自动加载引导文件的加载
*/
Doit::loadFile(DOIT_ROOT . '/core/AutoLoad.php');
/**
* 调用SPL扩展,注册__autoload()函数.
*/
spl_autoload_register(array('AutoLoad', 'loadClass'));
这里注册的类是上面加载的AutoLoad.php文件中的类