有关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个人网站架设连环讲(一)
Oct 09 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
屏蔽机器人从你的网站搜取email地址的php代码
Nov 14 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
Mar 19 PHP
详解php用static方法的原因
Sep 12 PHP
php的扩展写法总结
May 14 PHP
Laravel5.4简单实现app接口Api Token认证方法
Aug 29 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异常处理技术,顶级异常处理器
2012/06/13 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
JS随即打乱数组实现代码
2012/12/03 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
EsLint入门学习教程
2017/02/17 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Python中bisect的用法
2014/09/23 Python
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python读取键盘输入的2种方法
2015/06/16 Python
python统计日志ip访问数的方法
2015/07/06 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python绘制玫瑰的实现代码
2020/03/02 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
学校司机岗位职责
2013/11/14 职场文书
社会实践心得体会
2014/01/03 职场文书
网聊搭讪开场白
2015/05/28 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
css3带你实现3D转换效果
2022/02/24 HTML / CSS
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android