有关PHP中MVC的开发经验分享

yipeiwu_com5年前PHP代码库
一、入口
入口文件可以是单文件也可以是多文件,我现在用的基本属多文件,但是入口文件内容基本都是一样,为以后的修改其它的入口方式做基础,
复制代码 代码如下:

<?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微信开发用Cache 解决数据缓存

用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set、get一下就完了。现在没框架可用了,只好自己动手写一个cache暂时用。 这个...

手把手教你使用DedeCms V3的在线采集图文教程

手把手教你使用DedeCms V3的在线采集图文教程

这是我们要采集的目标网址-------------------------------------------------------------screen.width*0.7) {t...

mac pecl 安装php7.1扩展教程

鉴于brew突然间的不能使用,简直是好坑的,以前多方便的安装啊,现在却那啥,好尴尬啊 brew search php ==> Searching local taps... p...

PHP session有效期问题

一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期...

PHP获取表单所有复选框的值的方法

通常来说,php中总是只获取最后一个复选框的值,那么如何才能获取所有复选框的值? 解决办法如下: form表单的部分代码如下: <input type="checkbox" n...