[关闭]
@Chiang 2020-03-28T19:53:44.000000Z 字数 3526 阅读 545

框架初始化文件

doitphp 2020-03


doitphp_standard/doitphp/DoitPHP.php

主要是配置环境参数
根据路由参数获取实例化controller类的action方法
实现controller类方法的内容

判断项目启动标志

  1. if (!defined('IN_DOIT')) {
  2. exit();
  3. }

定义错误级别,分隔符,相关路径

  1. /**
  2. * 定义目录分隔符
  3. */
  4. if (!defined('DS')) {
  5. define('DS', DIRECTORY_SEPARATOR);
  6. }
  7. /**
  8. * 定义DoitPHP项目的基本路径
  9. */
  10. if (!defined('APP_ROOT')) {
  11. define('APP_ROOT', dirname(__FILE__) . DS . '..');
  12. }
  13. /**
  14. * 定义DoitPHP框架文件所在路径
  15. */
  16. if (!defined('DOIT_ROOT')) {
  17. define('DOIT_ROOT', dirname(__FILE__));
  18. }

定义抽象全局控制类

实例化项目

  1. /**
  2. * 项目执行
  3. *
  4. * 供项目入口文件所调用,用于启动框架程序运行
  5. *
  6. * @access public
  7. *
  8. * @param string $configFilePath 配置文件的路径
  9. *
  10. * @return object
  11. */
  12. public static function run($configFilePath = null) {
  13. //初始化运行环境
  14. self::_init($configFilePath);
  15. return self::_createWebApplication(Router::getRequest());
  16. }

传入全局配置文件

doitphp_standard/application/config/application.php

  • 定义路由格式
  • 是否开启路由重写
  • 是否开启Debug调试
  • 是否开启日志记录
  • 定义项目路径
  • 定义缓存路径
  • 定义日志路径
  • 设置视图文件格式
  • 配置数据库参数
  • 设置cookie生命周期
  • 设置session生命周期

初始化运行环境

加载初始化必须的依赖类文件

private static function _init($filePath = null)

  1. //加载对配置文件管理的类文件
  2. self::loadFile(DOIT_ROOT . '/core/Configure.php');
  3. //加载路由网址分析的类文件
  4. self::loadFile(DOIT_ROOT . '/core/Router.php');
  5. //加载Controller基类
  6. self::loadFile(DOIT_ROOT . '/core/Controller.php');
  1. public static function loadFile($filePath) {
  2. //参数分析
  3. if (!$filePath) {
  4. return false;
  5. }
  6. //判断文件有没有加载过,加载过的直接返回true
  7. if (!isset(self::$_incFiles[$filePath])) {
  8. //分析文件是不是真实存在,若文件不存在,则只能...
  9. if (!is_file($filePath)) {
  10. //当所要加载的文件不存在时,错误提示
  11. Response::halt('The File: ' . $filePath . ' is not found!');
  12. }
  13. include_once $filePath;
  14. self::$_incFiles[$filePath] = true;
  15. }
  16. return self::$_incFiles[$filePath];
  17. }

Response 类会通过AutoLoad.php类文件自动加载

加载并分析项目的主配置文件
  1. //加载并分析项目的主配置文件
  2. Configure::loadConfig($filePath);
通过配置加载类定义全局常量
  1. //定义是否开启调试模式。开启后,程序运行出现错误时,显示错误信息,便于程序调试。
  2. if (!defined('DOIT_DEBUG')) {
  3. define('DOIT_DEBUG', Configure::get('application.debug'));
  4. }

创建应用实例

self::_createWebApplication(Router::getRequest());

路由数组信息传入
  1. //参数分析
  2. if (!$routerInfo || !is_array($routerInfo)) {
  3. return false;
  4. }
  5. //定义变量_app
  6. static $_app = array();
  7. self::$_controller = ucfirst($routerInfo['controller']);
  8. self::$_action = strtolower($routerInfo['action']);
定义变量实例
  1. private static function _createWebApplication($routerInfo) {
  2. //参数分析
  3. if (!$routerInfo || !is_array($routerInfo)) {
  4. return false;
  5. }
  6. //定义变量_app
  7. static $_app = array();
  8. self::$_controller = ucfirst($routerInfo['controller']);
  9. self::$_action = strtolower($routerInfo['action']);
  10. $appId = self::$_controller . '-' . self::$_action;
  11. if (!isset($_app[$appId])) {
  12. //通过实例化及调用所实例化对象的方法,来完成controller中action页面的加载
  13. $controller = self::$_controller . 'Controller';
  14. $action = self::$_action . 'Action';
  15. //分析Controller子目录的情况。注:controller文件的命名中下划线'_'相当于目录的'/'。
  16. if (strpos($controller, '_') !== false) {
  17. //当controller名中含有'_'字符时,将'_'替换为路径分割符。如:"/" 或 "\"
  18. $childDirArray = explode('_', strtolower(self::$_controller));
  19. $tagFileName = ucfirst(array_pop($childDirArray));
  20. $childDirName = implode(DS, $childDirArray);
  21. $tagFileName = $childDirName . DS . $tagFileName . 'Controller';
  22. } else {
  23. $tagFileName = $controller;
  24. }
  25. //分析controller文件的路径
  26. $controllerFilePath = BASE_PATH . '/controllers/' . $tagFileName . '.php';
  27. if (!is_file($controllerFilePath)) {
  28. //当controller名称中不含有'_'字符时
  29. self::_show404Error();
  30. }
  31. //当文件在controller根目录下存在时,直接加载。
  32. self::loadFile($controllerFilePath);
  33. //创建一个页面控制器对象(Controller Object)
  34. $appObject = new $controller();
  35. if (method_exists($controller, $action)){
  36. $_app[$appId] = $appObject->$action();
  37. } else {
  38. //所调用方法在所实例化的对象中不存在时
  39. self::_show404Error();
  40. }
  41. }
  42. return $_app[$appId];
  43. }

引入自动加载文件

  1. /**
  2. * 自动加载引导文件的加载
  3. */
  4. Doit::loadFile(DOIT_ROOT . '/core/AutoLoad.php');

调用SPL扩展,注册__autoload()函数

  1. /**
  2. * 调用SPL扩展,注册__autoload()函数.
  3. */
  4. spl_autoload_register(array('AutoLoad', 'loadClass'));

这里注册的类是上面加载的AutoLoad.php文件中的类

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注