闪电搭建自己MVC框架

 

1. 首先我们要有一个封装mvc的流程

闪电搭建自己MVC框架_第1张图片

2.创建和下图一样的文件夹,来封装mvc

 

闪电搭建自己MVC框架_第2张图片

3. 在入口文件index.PHP里面来写一些变量

 

[python]  view plain  copy
 
  1. /*  
  2.  * 入口文件  
  3.  * 1.定义常量  
  4.  * 2.加载函数库  
  5.  * 3.启动框架  
  6.  * */  
  7.   
  8. define('IMOOC',realpath('./'));  //当前框架所在的目录  
  9. define('CORE',IMOOC,'/core');  //框架核心文件所在的目录  
  10. define('APP',IMOOC,'/app');    //项目文件所在的目录  
  11. define('MODULE','app');  
  12.   
  13. define('DEBUG',true);  //开启调试模式  
  14.   
  15.   
  16. if(DEBUG)  
  17. {  
  18.     //打开显示错误的开关  
  19.     ini_set('display_error','On');  
  20. }else{  
  21.     ini_set('display_error','Off');  
  22. }  
  23.   
  24. include './core/common/function.php';   //加载函数库文件  
  25. //p(IMOOC);  
  26. include './core/imooc.php';   //加载框架的核心文件  
  27.   
  28. //当我们new的类不存在的时候会触发“spl_autoload_register('imooc::load');”这个方法  
  29. spl_autoload_register('\core\imooc::load');  
  30. \core\imooc::run();  
 

 

3.在入口文件里面写到了一个p方法,这个p方法是写在function.php里面的。(这个是我按照视频里面的写的)

 

[python]  view plain  copy
 
  1. function p($var)  
  2. {  
  3.     if(is_bool($var))  
  4.     {  
  5.         var_dump($var);  
  6.     }else if(is_null($var))  
  7.     {  
  8.         var_dump(NULL);  
  9.     }else{  
  10.         echo "1000;  
  11.               padding:10px;border-radius:5px;background:#F5F5F5;border:1px solid #aaa;  
  12.               font-size:14px;line-height:18px;opacity:0.9'>".print_r($var,true)."";  
  13.   
  14.     }  
  15. }  

 

 

4.创建一个lib文件夹来存放我们的路由类。

 

[python]  view plain  copy
 
  1. namespace core\lib;  
  2. class route  
  3. {  
  4.     public $controller;  
  5.     public $action;  
  6.     public function __construct()  
  7.     {  
  8.         //p('route ok');  
  9.         /*  
  10.          * 1.隐藏index.php  
  11.          * 2.获取URL的参数部分  
  12.          * 3.获取对应的控制器和方法  
  13.          * */  
  14.         //获取URL的参数部分  
  15.         if(isset($_SERVER['REQUEST_URI']) && $_SERVER["REQUEST_URI"] != '/')  
  16.         {  
  17.             //解析/index/index  
  18.             $path = $_SERVER['REQUEST_URI'];  
  19.             $patharr = explode('/',trim($path,'/'));  
  20.             //p($patharr);  
  21.             //判断是否存在  
  22.             if(isset($patharr[0]))  
  23.             {  
  24.                 $this->controller = $patharr[0];  
  25.             }  
  26.             unset($patharr[0]);  
  27.             if(isset($patharr[1]))  
  28.             {  
  29.                 $this->action = $patharr[1];  
  30.                 unset($patharr[1]);  
  31.             }else{  
  32.                 $this->action = 'index';  
  33.             }  
  34.             //url多余部分转换成GET参数  
  35.             $count = count($patharr) + 2;  
  36.             $i = 2;  
  37.             while($i<$count)  
  38.             {  
  39.                 if(isset($patharr[$i+1]))  
  40.                 {  
  41.                     $_GET[$patharr[$i]] = $patharr[$i+1];  
  42.                 }  
  43.                 $i = $i+2;  
  44.             }  
  45.             unset($_GET['url']);  
  46.         }else{  
  47.             //默认情况下控制器是index  
  48.             $this->controller = 'index';  
  49.             //默认情况下方法是index  
  50.             $this->action = 'index';  
  51.     }  
  52.   
  53.     }  
  54. }  



 

5.在imooc.php里面写控制器的类和一个自动加载类

 

[python]  view plain  copy
 
  1. /**  
  2.  * Created by PhpStorm.  
  3.  * User: pc  
  4.  * Date: 2016/12/23  
  5.  * Time: 18:44  
  6.  */  
  7. namespace core;  
  8.   
  9. class imooc  
  10. {  
  11.     public static $classMap = array();  
  12.     public $assign;  
  13.   
  14.     //加载控制器  
  15.     static public function run()  
  16.     {  
  17.         //p('OK');  
  18.         $route = new \core\lib\route();  
  19.         $controllerClass = $route->controller;  
  20.         $action = $route->action;  
  21.         $controllerfile = 'app/controller/'.$controllerClass.'Controller.php';  
  22.         //p($controllerfile);exit();  
  23.         $controllerClass = '\\'.MODULE.'\controller\\'.$controllerClass.'Controller';  
  24.         if(is_file($controllerfile))  
  25.         {  
  26.             include $controllerfile;  
  27.             $controller = new $controllerClass();  
  28.             $controller -> $action();  
  29.         }else{  
  30.             throw new \Exception('找不到控制器'.$controllerClass);  
  31.         }  
  32.         //p($route);  
  33.   
  34.     }  
  35.   
  36.     //自动加载类  
  37.     static public function load($class)  
  38.     {  
  39.         //自动加载类库  
  40.         if(isset($classMap[$class]))  
  41.         {  
  42.             return true;  
  43.         }else{  
  44.             $class = str_replace('\\','/',$class);  
  45.             $file = IMOOC.'/'.$class.'.php';  
  46.             if(is_file($file))  
  47.             {  
  48.                 include $file;  
  49.                 self::$classMap[$class] = $class;  
  50.             }else{  
  51.                 return false;  
  52.             }  
  53.         }  
  54.   
  55.     }  

 

 

 

6.然后在lib里面创建一个模型类model.php来连接我们数据库

 

[php]  view plain  copy
 
  1. namespace core\lib;  
  2.   
  3. class model extends \PDO  
  4. {  
  5.     public function __construct()  
  6.     {  
  7.         $dsn = 'mysql:host=localhost;dbname=mvc';  
  8.         $username = 'root';  
  9.         $password = 'root';  
  10.         try{  
  11.             parent::__construct($dsn,$username,$password);  
  12.         }catch (\PDOException $e){  
  13.             p($e->getMessage());  
  14.         }  
  15.     }  
  16. }  

 

模型写好后,在控制器层里面来调用

 

[php]  view plain  copy
 
  1. namespace app\controller;  
  2. class indexController extends \core\imooc  
  3. {  
  4.     public function index()  
  5.     {  
  6.         $model = new \core\lib\model();  
  7.         $sql = "SELECT * FROM user ";  
  8.         $res = $model->query($sql);  
  9.         p($res->fetchAll());  
  10.   
  11.     }  
  12.   
  13. }  


然后这样就可以连接我们的数据库了。

 

7.然后就是最后一个了,创建一个视图层views文件夹在里面创建一个index,html文件,index.html里面的内容可以随便写。例如

 

[html]  view plain  copy
 
  1. <h1>php echo $title;?>h1>  
  2. <h3>php echo $data;?>h3>  


然后就是在控制器层里面来写

 

 

[php]  view plain  copy
 
  1. namespace app\controller;  
  2. class indexController extends \core\imooc  
  3. {  
  4.     public function index()  
  5.     {  
  6.         $data = "hello world";  
  7.         $title = "视图文件";  
  8.         $this -> assign('title',$title);  
  9.         $this -> assign('data',$data);  
  10.         $this -> dispaly('index.html');  
  11.       
  12.     }  
  13.   
  14. }  

 

然后就是assign和display还有data是怎么来的,是写在imooc文件里面的

 

[php]  view plain  copy
 
  1. public function assign($name,$value)  
  2.     {  
  3.         $this->assign[$name] = $value;  
  4.     }  
  5.   
  6.     public function dispaly($file)  
  7.     {  
  8.         $file = 'app/views/'.$file;  
  9.         if(is_file($file))  
  10.         {  
  11.             extract($this->assign);  
  12.             include $file;  
  13.         }  
  14.     }  


但是这样还不行,我们还要在里面写一个属性值来存放值

 

 

[php]  view plain  copy
 
  1. public $assign;  


这样一个简单的mvc框架就已经封装好了!!!

 

转载于:https://www.cnblogs.com/quanzhiguo/p/7363491.html

你可能感兴趣的:(闪电搭建自己MVC框架)