入口文件->定义常量->引入函数库->自动加载类->启动框架->路由解析->加载控制器->返回结果
01先从入口文件开始;
<pre>1:定义常量,
当前框架的根目录
核心文件在的目录
项目在的目录
define('mvc',realpath('./'));
define('core',mvc.'/core');
define('app',mvc.'/app');
define('MODULE','app');
<pre name="code" class="html"><pre>2:加载函数库
3:启动框架
02:自动加载类
当我们new的类不存在的时候,会自动加载。
static public function load($class)
{
if(isset($classMap[$class]))
{
return true;
}
else
{
$class=str_replace('\\','/',$class);
$file=mvc.'/'.$class.'.php';
if(is_file($file))
{
include $file;
self::$classMap['class']=$class;
}
else
{
return false;
}
}
}
使用方法:spl_autoload_register('\core\imooc::load');
03:路由类
1:隐藏index.php
2:获取URL 参数部分
3:返回对应的控制器方法名
if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/')
{
$path=$_SERVER['REQUEST_URI'];
$patharr = explode('/',trim($path,'/'));
//p($patharr);die;
if(isset($patharr[0]))
{
$this->ctrl =$patharr[0];
}
unset($patharr[0]);
if(isset($patharr[1]))
{
$this->action =$patharr[1];
unset($patharr[1]);
}
else
{
$this->action=conf::get('ACTION','route');
}
//p($patharr);die;
//url多余部分转成get请求
//id/1
$count=count($patharr)+2;
$i=2;
while($i < $count)
{
if(isset($patharr[$i+1]))
{
$_GET[$patharr[$i]] = $patharr[$i + 1];
}
$i = $i + 2;
}
unset($_GET['url']);
//p($_GET);
}
else
{
$this->ctrl=conf::get('CTRL','route');
$this->action=conf::get('ACTION','route');
}
04:路由解析
根据路由类返回对应的控制器方法名,来进行包含相应的控制器方法名。
05:模型类
继承 \PDO来连接数据库
class model extends \PDO
{
function __construct()
{
$database = conf::all('database');
try{
parent::__construct($database['DSN'],$database['USERNAME'],$database['PASSWD']);
}
catch(\PDOException $e)
{
p($e->getMessage());
}
}
}
06:视图类
用 assign ,display 两个方法;
$data="Hello World";$title="视图文件";
$this->assign('data',$data);
$this->assign('title',$title);
$this->display('index.html');