有关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中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
PHP中几个常用的魔术常量
Feb 23 PHP
php利用新浪接口查询ip获取地理位置示例
Jan 20 PHP
Codeigniter实现多文件上传并创建多个缩略图
Jun 12 PHP
给ECShop添加最新评论
Jan 07 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
3种php生成唯一id的方法
Nov 23 PHP
配置Nginx+PHP的正确思路与过程
May 10 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP实现字母数字混合验证码功能
Jul 11 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
php解决安全问题的方法实例
2019/09/19 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Python实现全局变量的两个解决方法
2014/07/03 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
python 识别图片中的文字信息方法
2018/05/10 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
python os模块简单应用示例
2019/05/23 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
高等教育学专业自荐书
2014/06/17 职场文书
小学语文国培研修日志
2015/11/13 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android