有关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 相关文章推荐
深入php var_dump()函数的详解
Jun 05 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
解析php入库和出库
Jun 25 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
Laravel 5 学习笔记
Mar 06 PHP
帝国cms目录结构分享
Jul 06 PHP
php获取错误信息的方法
Jul 17 PHP
php实现无限级分类(递归方法)
Aug 06 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
PHP钩子与简单分发方式实例分析
Sep 04 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实现的随机广告显示代码
2007/06/14 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
深入php内核之php in array
2015/11/10 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
深入理解Vue nextTick 机制
2018/04/28 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
2019/04/18 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
vue登录注册实例详解
2019/09/14 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
2020/07/19 Javascript
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
食品业务员岗位职责
2014/03/18 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
商务代表岗位职责
2015/02/15 职场文书
法制工作总结2015
2015/07/23 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
如何用python插入独创性声明
2021/03/31 Python
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技