怎样封装一个自己的MVC框架(二)

it2022-05-24  69

 

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框架 网络封装

最新回复(0)