有关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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 PHP
PHP中读写文件实现代码
Oct 20 PHP
php 字符串替换的方法
Jan 10 PHP
PHP 登录记住密码实现思路
May 07 PHP
php定时计划任务的实现方法详解
Jun 06 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
Yii中CGridView禁止列排序的设置方法
Jul 12 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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
jquery tools之tooltip
2009/07/25 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
python封装对象实现时间效果
2020/04/23 Python
python链接Oracle数据库的方法
2015/06/28 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
详解python3中tkinter知识点
2018/06/21 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python如何实现视频转代码视频
2019/06/17 Python
Python shelve模块实现解析
2019/08/28 Python
Django实现基于类的分页功能
2019/10/31 Python
Python字典底层实现原理详解
2019/12/18 Python
python3排序的实例方法
2020/10/20 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
个人工作主要事迹
2014/05/08 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL