• [原创]有关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(!keheng_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         }else{
    23             exit('模型文件不存在:'.$url.'.model.php');
    24         }
    25     }
    26 }


    但里面有个注意的是模型文件里面需要输出的数据全部都是通过views这样一个类进行输出,包里视图文件里面所有的系统参数等。不知道,这种方法是不是显示得多此一举,原来是想把所有要输出的数据进行封装。

     转载请注明出处:http://www.cnblogs.com/keheng/archive/2012/05/17/2506155.html     作者:[九狐科技]keheng

    其它的模板文件也都是用类进行了封装,具体怎么写高人应该都知道了吧,这些只是我的个人见解,但是缓存应该怎么写,现在还是一个模糊的概念,是不是在读取数据的时候,方向应该是读取缓存,然后再判断缓存是否存在,再判断是否需要建立缓存呢?具体操作方法还是不是很明白。希望能有高人指点指点。

  • 相关阅读:
    FastAPI框架
    bitmap去重与布隆过滤器
    MongoDB
    分布式爬虫
    scrapy 请求传参
    Scrapy 对接selenium
    Scrapy 去重源码分析
    [Python]网络小说爬取、爬虫
    学习进度报告【第八周】
    [opencv]图像处理-边缘检测
  • 原文地址:https://www.cnblogs.com/keheng/p/2506155.html
Copyright © 2020-2023  润新知