有关PHP中MVC的开发经验分享 |
本文标签:php,mvc 一、入口 入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础, 复制代码 代码如下: <?php require command/config.php; require command/app.php; app::run($config); ?> 首先不用说大家也看得出来,加载系统配置文件,然后通过引擎来加载系统配置 。 二、引擎 复制代码 代码如下: public function run($config){ header("Content-type:text/html;charset=utf-8"); self::$config = $config; //加载系统配置 self::copyright(); self::testsystem(); //系统环境 self::setsystem(); //设置系统参数 self::incinfo(); if(!IN_WEB){exit(网站正关闭维护中,请稍候访问!);} defined(KEHENG_DEBUG) or define(KEHENG_DEBUG,true); // 是否调试模式 self::setpath(); //设置系统路径 self::getdatabase(); //测试数据库 self::loadlib(); //加载库 self::getRouteConfig(); //运行路由并加载控制器 } 引擎里面首先设置配置文件,再测试系统参数,加载系统模块,取得配置在的网站信息文件,设置网站需要的路径,测试系统配置里面的数据库参数,加载库文件,最后是加载路由获取请求地址 。不知道这样的流程对不对,只是我根据自己的学习自己编写的一套而已,但里面却缺少缓存,具体缓存应该怎么样的设置 。 这里的数据库测试是根据配置用哪一类型的数据库,再加载对该类型数据库操作的封装文件 。 三、路由 以下为上面的最后一个函数,加载控制器文件,根据配置文件获得请求方式 。 复制代码 代码如下: public function getRouteConfig(){ $route_type=self::$config[route][url_type]; switch($route_type){ case 1: //echo $_SERVER[SCRIPT_NAME].<br />; $query_string=$_SERVER[QUERY_STRING]; //echo $_SERVER[REQUEST_URI].<br />; $urlstr=$_GET[controller]; break; case 4: $url = end(explode(/, $_SERVER["PHP_SELF"])); $urlstr = strtolower(substr($url,0,-4)); break; } if(file_exists(Contr_DIR.Controller.php)){ require Contr_DIR.Controller.php; //echo $urlstr; $template = self::$config[Templates]; controller::load($urlstr,$template); }else{ exit(控制器文件不存在); } } 四、控制器 控制器文件也蛮简单,只是根据路由分析出的地址来加载模型文件和视图文件, 复制代码 代码如下: class controller{ public $obj; public function load($url,$template){ $config=$template; if(file_exists(Model_DIR.$url..model.php)){ $views = new views; //echo Model_DIR.$url..model.php; require Model_DIR.$url..model.php; $temp = $config[$url][0]; if($temp!= && $temp!=null && isset($temp)){ if(file_exists(Templ_DIR.$temp)){ //echo Templ_DIR.$temp; require Templ_DIR.$temp; }else{ exit(视图文件不存在!.$temp); } }else{ exit(此页未设置显示模板!.$temp); } unset($views); }else{ exit(模型文件不存在:.$url..model.php); } } } 但里面有个注意的是模型文件里面需要输出的数据全部都是通过views这样一个类进行输出,包里视图文件里面所有的系统参数等 。不知道,这种方法是不是显示得多此一举,原来是想把所有要输出的数据进行封装 。 其它的模板文件也都是用类进行了封装,具体怎么写高人应该都知道了吧,这些只是我的个人见解,但是缓存应该怎么写,现在还是一个模糊的概念,是不是在读取数据的时候,方向应该是读取缓存,然后再判断缓存是否存在,再判断是否需要建立缓存呢?具体操作方法还是不是很明白 。希望能有高人指点指点 。 |