1.首先需要写一个开口文件
主要包括以下几点
2.加载类库
3.启动框架
<?php
/**
* 1.入口文件
* 2.定义常量(路由)
* 3.加载类库
* 4.启动框架
*/
//定义根目录
define("ROOT",dirname(__FILE__));
//定义核心文件目录
define('CORE', ROOT."/core");
//项目目录
define('APP', ROOT."/app");
//项目目录相对路径
define('MODULE', "app");
//是否开启调试模式
define('DEBUG',true);
if (DEBUG) {
ini_set('display_error', 'On');
}else{
ini_set('display_error', 'Off');
}
//引入公共文件
include CORE."/common/function.php";
//p(ROOT);
//引入核心类库
include CORE."/mymvc.php";
//自动加载
spl_autoload_register("\core\mymvc::autoload");
//启动框架
\core\mymvc::run();
2.定义路由,写一个路由类,通过构造函数解析路由信获取控制器方法,及get传值
<?php
namespace core\lib;
class route
{
//定义控制器
public $control;
//定义方法
public $action;
//定义构造函数解析路由
public function __construct()
{
//获取url参数,获取控制器、方法
if (isset($_SERVER['PATH_INFO'])&&$_SERVER['PATH_INFO']!="/") {
//获取url控制器、方法
$path=$_SERVER['PATH_INFO'];
$patharr=explode("/",trim($path,"/"));
//p($patharr);
//定义控制器、方法名
if (isset($patharr[0])) {
$this->control=$patharr[0];
}
if (isset($patharr[1])) {
$this->action=$patharr[1];
}else{
$this->action="index";
}
//获取参数的值
$count=count($patharr)+2;
$i=2;
while ($i < $count) {
if (isset($patharr[$i+1])) {
$_GET[$patharr[$i]]=$patharr[$i+1];
}
$i+=2;
}
//p($_GET);
}else{
$this->control="index";
$this->action="index";
}
}
}
3.写一个核心文件来加载类文件;自动加载类文件,然后加载路由类文件,解析路由获取控制器、方法,
通过开口文件的自动加载类,根据获取的控制器方法,加载控制器获取结果
<?php
namespace core;
class mymvc
{
//定义加载类地图
public static $classMap=array();
//开启框架
static function run()
{
//p('OK');
$route=new \core\lib\route();
//加载控制器方法
$control=$route->control;
$action=$route->action;
//拼接控制器文件目录
$controlfile=APP."/controllers/".$control."Controller.php";
//拼接控制器路径
$controlpath="\\".MODULE."\controllers\\".$control."Controller";
if (is_file($controlfile)) {
include $controlfile;
$con=new $controlpath();
$con->$action();
}else{
throw new \Exception('找不到控制器'.$control);
}
}
//加载类文件
static function autoload($class)
{
//首先判断该类是否已经调用
if (isset($classMap[$class])) {
return true;
}else{
//拼接类文件路径
$class=str_replace("\\", "/", $class);
$file=ROOT."/".$class.".php";
if (is_file($file)) {
include $file;
self::$classMap[$class]=$class;
}else{
return false;
}
}
}
}
4.通过以上操作就可以简单的完成一个控制器方法的访问
欲知后事如何,请听下回分解......