@Chiang
2020-03-28T11:53:44.000000Z
字数 3526
阅读 790
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;}//判断文件有没有加载过,加载过的直接返回trueif (!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;}//定义变量_appstatic $_app = array();self::$_controller = ucfirst($routerInfo['controller']);self::$_action = strtolower($routerInfo['action']);
private static function _createWebApplication($routerInfo) {//参数分析if (!$routerInfo || !is_array($routerInfo)) {return false;}//定义变量_appstatic $_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文件中的类
