有关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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
php strtotime 函数UNIX时间戳
Jan 14 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
Laravel 4 初级教程之Pages、表单验证
Oct 30 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
详解php伪造Referer请求反盗链资源
Jan 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
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PDO::rollBack讲解
2019/01/29 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
javascript 回调函数详解
2014/11/11 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
Bootstrap入门书籍之(三)栅格系统
2016/02/17 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
小程序实现发表评论功能
2018/07/06 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
详解Python中for循环的使用
2015/04/14 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
详解python logging日志传输
2020/07/01 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
计算机应用毕业生自荐信
2013/10/23 职场文书
会计核算科岗位职责
2014/03/19 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python
SpringRetry重试框架的具体使用
2021/07/25 Java/Android