当前位置:编程学习 > php >>

有关PHP中MVC的个人见解

经过近一个月对MVC的研究,自己也通过网上有朋友的指导,有了一套自己的MVC流程及框架,但是感觉缺限还是很多,灵活性方面还是欠缺,但又不知道怎么样的具体改进,今天我就把我的流程及思想发布,希望有高人能够指点指点。
一、入口
入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础,
1 <?php
2     require 'command/config.php';
3     require 'command/app.php';
4     app::run($config);
5 ?>
首先不用说大家也看得出来,加载系统配置文件,然后通过引擎来加载系统配置。
二、引擎
 
 1     public function run($config){
 2         header("Content-type:text/html;charset=utf-8");
 3         self::$config = $config;    //加载系统配置
 4         self::copyright();
 5         self::testsystem();            //系统环境
 6         self::setsystem();            //设置系统参数
 7         self::incinfo();
 8         if(!IN_WEB){exit('网站正关闭维护中,请稍候访问!');}
 9         defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否调试模式
10        
11         self::setpath();            //设置系统路径
12         self::getdatabase();        //测试数据库
13         self::loadlib();            //加载库
14         self::getRouteConfig();        //运行路由并加载控制器
15     }
 
引擎里面首先设置配置文件,再测试系统参数,加载系统模块,取得配置在的网站信息文件,设置网站需要的路径,测试系统配置里面的数据库参数,加载库文件,最后是加载路由获取请求地址。不知道这样的流程对不对,只是我根据自己的学习自己编写的一套而已,但里面却缺少缓存,具体缓存应该怎么样的设置。
这里的数据库测试是根据配置用哪一类型的数据库,再加载对该类型数据库操作的封装文件。
三、路由
以下为上面的最后一个函数,加载控制器文件,根据配置文件获得请求方式。
 
 1 public function getRouteConfig(){
 2         $route_type=self::$config[route][url_type];
 3         switch($route_type){
 4             case 1:
 5                 //echo $_SERVER['SCRIPT_NAME'].'<br />';
 6                 $query_string=$_SERVER['QUERY_STRING'];
 7                 //echo $_SERVER['REQUEST_URI'].'<br />';
 8                 $urlstr=$_GET['controller'];
 9                 break;
10             case 4:
11                 $url = end(explode('/', $_SERVER["PHP_SELF"]));
12                 $urlstr = strtolower(substr($url,0,-4));
13                 break;
14            
15         }
16         if(file_exists(Contr_DIR.'Controller.php')){
17             require Contr_DIR.'Controller.php';
18             //echo $urlstr;
19             $template = self::$config['Templates'];
20             controller::load($urlstr,$template);
21         }else{
22             exit('控制器文件不存在');
23         }
24    
25     }
 
四、控制器
控制器文件也蛮简单,只是根据路由分析出的地址来加载模型文件和视图文件,
 
 1 class controller{
 2     public $obj;
 3     public function load($url,$template){
 4        
 5         $config=$template;
 6         if(file_exists(Model_DIR.$url.'.model.php')){
 7             $views = new views;
 8             //echo Model_DIR.$url.'.model.php';
 9             require Model_DIR.$url.'.model.php';
10             $temp = $config[$url][0];
11             if($temp!='' && $temp!=null && isset($temp)){
12                 if(file_exists(Templ_DIR.$temp)){
13                     //echo Templ_DIR.$temp;
14                     require Templ_DIR.$temp;
15                 }else{
16                     exit('视图文件不存在!'.$temp);
17                 }
18             }else{
19                 exit('此页未设置显示模板!'.$temp);
20             }
21             unset($views);
22    

补充:Web开发 , php ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,