有关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 UTF8编码内的繁简转换类
Jul 20 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
Jul 24 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
PHP实现懒加载的方法
Mar 07 PHP
php清除和销毁session的方法分析
Mar 19 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 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
Apache设置虚拟WEB
2006/10/09 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
ini_set的用法介绍
2014/01/07 PHP
php 后端实现JWT认证方法示例
2018/09/04 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
js表单登陆验证示例
2016/10/19 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
用vue快速开发app的脚手架工具
2018/06/11 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
Vue实现简易计算器
2020/02/25 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
matplotlib设置legend图例代码示例
2017/12/19 Python
python实现汉诺塔算法
2021/03/01 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
学雷锋活动总结报告
2014/06/26 职场文书
安全目标管理责任书
2014/07/25 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL