有关PHP中MVC的开发经验分享


Posted in PHP onMay 17, 2012

一、入口
入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础,

<?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这样一个类进行输出,包里视图文件里面所有的系统参数等。不知道,这种方法是不是显示得多此一举,原来是想把所有要输出的数据进行封装。
其它的模板文件也都是用类进行了封装,具体怎么写高人应该都知道了吧,这些只是我的个人见解,但是缓存应该怎么写,现在还是一个模糊的概念,是不是在读取数据的时候,方向应该是读取缓存,然后再判断缓存是否存在,再判断是否需要建立缓存呢?具体操作方法还是不是很明白。希望能有高人指点指点。
PHP 相关文章推荐
图书管理程序(三)
Oct 09 PHP
PHP4在Windows2000下的安装
Oct 09 PHP
PHP 的几个配置文件函数
Dec 21 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
解析PHP 使用curl提交json格式数据
Jun 29 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
php实现的顺序线性表示例
May 04 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
laravel-admin的图片删除实例
Sep 30 PHP
php的array_multisort()使用方法介绍
May 16 #PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 #PHP
php array的学习笔记
May 16 #PHP
php文件操作实例代码
May 10 #PHP
PHP图片验证码制作实现分享(全)
May 10 #PHP
php array的学习笔记
May 10 #PHP
php 中的4种标记风格介绍
May 10 #PHP
You might like
四个PHP非常实用的功能
2015/09/29 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
JavaScript this 深入理解
2009/07/30 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
vue实现评价星星功能
2020/06/30 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
Python中的闭包总结
2014/09/18 Python
Python中类的继承代码实例
2014/10/28 Python
Django使用详解:ORM 的反向查找(related_name)
2018/05/30 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
艺术学院毕业生自我评价
2014/03/02 职场文书
新教师培训心得体会
2014/09/02 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
如何写辞职信
2015/05/13 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL