摘要:一.入口文件 入口文件就是将所有要用到的文件和框架并设置要使用的常量等操作,
//加载Composer自动加载器
require 'vendor/autoload.php';
//加载框架基础类
require 'hero/Base.php';
//定义项目根目录
define('ROOT
一.入口文件
入口文件就是将所有要用到的文件和框架并设置要使用的常量等操作,//加载Composer自动加载器
require 'vendor/autoload.php';
//加载框架基础类
require 'hero/Base.php';
//定义项目根目录
define('ROOT_PATH',__DIR__.'/');
//导入配置文件
$config = require 'hero/config.php';
//获取URL中的查询字符串
$queryStr = $_SERVER['QUERY_STRING'];
//启动框架
(new \hero\Base($config,$queryStr))->run();
二.基础类
基础类暂时实现了调试模式开关,自动加载和启动框架,即是启动框架之后调用调试模式开关方法和自动加载方法,以及之前写的路由解析和请求分发,实现了框架运行.
当入口文件调用基础类中run方法启动框架,调用查看调试模式,实现自动加载 Route类,调用Route类中路由解析方法解析路由,然后在进行请求分发,请求分发时new一个路由解析出的类,则继续触发自动加载方法,加载其对应文件进行执行.这么理解是否正确?namespace hero;
class Base
{
//框架配置信息
protected $config = [];
//路由信息
protected $queryStr = '';
//构造方法
public function __construct($config,$queryStr='')
{
$this->config = $config;
$this->queryStr = $queryStr;
}
//设置调试模式
public function setDebug()
{
//debug == true
if ($this->config['app']['debug']){
error_reporting(E_ALL); //获取所有错误信息
ini_set('display_errors','On');
}else{
// error_reporting(E_ALL);
ini_set('display_errors','Off');
ini_set('log_errors','On');
}
}
//注册自动加载器:自动加载的是类
public function loader($class)
{
// new \app\admin\controller\Stu(), app\admin\controller\Stu.php
// new Stu()
//$class == \\app\admin\controller\Stu
// /app/admin.controller/Stu
$path = ROOT_PATH.str_replace('\\','/',$class). '.php';
// return $path;
//如果没有找到类文件,就直接返回默认页
if(!file_exists($path)){
header('Location:/');
}
require $path;
}
//启动框架
public function run(){
//调试模式
$this->setDebug();
//自动加载
spl_autoload_register([$this,'loader']);
//请求分发
echo (new Route($this->config['route']))->parse($this->queryStr)->dispatch();
}