1.首先需要写一个开口文件
主要包括以下几点
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.通过以上操作就可以简单的完成一个控制器方法的访问
转载于:https://www.cnblogs.com/quanzhiguo/p/7363342.html
相关资源:Android MVC框架 网络封装