有关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 使用post,get的一种简洁方式
Apr 25 PHP
php中用foreach来操作数组的代码
Jul 17 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
开启PHP的伪静态模式
Dec 31 PHP
php编程每天必学之表单验证
Mar 01 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
thinkPHP模板引擎用法示例
Dec 08 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
PHP执行普通shell命令流程解析
Aug 24 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
咖啡语言
2021/03/03 咖啡文化
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
2020/08/17 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python urlopen 使用小示例
2008/09/06 Python
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
详解Python3 基本数据类型
2019/04/19 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
Python操作Excel的学习笔记
2021/02/18 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
介绍一下游标
2012/01/10 面试题
中班中秋节活动反思
2014/02/18 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
婚前协议书范本
2014/10/27 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android