有關(guān)PHP中MVC的開發(fā)經(jīng)驗分享
更新時間:2012年05月17日 15:14:15 作者:
經(jīng)過近一個月對MVC的研究,自己也通過網(wǎng)上有朋友的指導(dǎo),有了一套自己的MVC流程及框架,但是感覺缺限還是很多,靈活性方面還是欠缺,但又不知道怎么樣的具體改進,今天我就把我的流程及思想發(fā)布,希望有高人能夠指點指點
一、入口
入口文件可以是單文件也可以是多文件,我現(xiàn)在用的基本屬多文件,但是入口文件內(nèi)容基本都是一樣,為以后的修改其它的入口方式做基礎(chǔ),
<?php
require 'command/config.php';
require 'command/app.php';
app::run($config);
?>
首先不用說大家也看得出來,加載系統(tǒng)配置文件,然后通過引擎來加載系統(tǒng)配置。
二、引擎
public function run($config){
header("Content-type:text/html;charset=utf-8");
self::$config = $config; //加載系統(tǒng)配置
self::copyright();
self::testsystem(); //系統(tǒng)環(huán)境
self::setsystem(); //設(shè)置系統(tǒng)參數(shù)
self::incinfo();
if(!IN_WEB){exit('網(wǎng)站正關(guān)閉維護中,請稍候訪問!');}
defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否調(diào)試模式
self::setpath(); //設(shè)置系統(tǒng)路徑
self::getdatabase(); //測試數(shù)據(jù)庫
self::loadlib(); //加載庫
self::getRouteConfig(); //運行路由并加載控制器
}
引擎里面首先設(shè)置配置文件,再測試系統(tǒng)參數(shù),加載系統(tǒng)模塊,取得配置在的網(wǎng)站信息文件,設(shè)置網(wǎng)站需要的路徑,測試系統(tǒng)配置里面的數(shù)據(jù)庫參數(shù),加載庫文件,最后是加載路由獲取請求地址。不知道這樣的流程對不對,只是我根據(jù)自己的學(xué)習(xí)自己編寫的一套而已,但里面卻缺少緩存,具體緩存應(yīng)該怎么樣的設(shè)置。
這里的數(shù)據(jù)庫測試是根據(jù)配置用哪一類型的數(shù)據(jù)庫,再加載對該類型數(shù)據(jù)庫操作的封裝文件。
三、路由
以下為上面的最后一個函數(shù),加載控制器文件,根據(jù)配置文件獲得請求方式。
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('控制器文件不存在');
}
}
四、控制器
控制器文件也蠻簡單,只是根據(jù)路由分析出的地址來加載模型文件和視圖文件,
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('此頁未設(shè)置顯示模板!'.$temp);
}
unset($views);
}else{
exit('模型文件不存在:'.$url.'.model.php');
}
}
}
但里面有個注意的是模型文件里面需要輸出的數(shù)據(jù)全部都是通過views這樣一個類進行輸出,包里視圖文件里面所有的系統(tǒng)參數(shù)等。不知道,這種方法是不是顯示得多此一舉,原來是想把所有要輸出的數(shù)據(jù)進行封裝。
其它的模板文件也都是用類進行了封裝,具體怎么寫高人應(yīng)該都知道了吧,這些只是我的個人見解,但是緩存應(yīng)該怎么寫,現(xiàn)在還是一個模糊的概念,是不是在讀取數(shù)據(jù)的時候,方向應(yīng)該是讀取緩存,然后再判斷緩存是否存在,再判斷是否需要建立緩存呢?具體操作方法還是不是很明白。希望能有高人指點指點。
入口文件可以是單文件也可以是多文件,我現(xiàn)在用的基本屬多文件,但是入口文件內(nèi)容基本都是一樣,為以后的修改其它的入口方式做基礎(chǔ),
復(fù)制代碼 代碼如下:
<?php
require 'command/config.php';
require 'command/app.php';
app::run($config);
?>
首先不用說大家也看得出來,加載系統(tǒng)配置文件,然后通過引擎來加載系統(tǒng)配置。
二、引擎
復(fù)制代碼 代碼如下:
public function run($config){
header("Content-type:text/html;charset=utf-8");
self::$config = $config; //加載系統(tǒng)配置
self::copyright();
self::testsystem(); //系統(tǒng)環(huán)境
self::setsystem(); //設(shè)置系統(tǒng)參數(shù)
self::incinfo();
if(!IN_WEB){exit('網(wǎng)站正關(guān)閉維護中,請稍候訪問!');}
defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否調(diào)試模式
self::setpath(); //設(shè)置系統(tǒng)路徑
self::getdatabase(); //測試數(shù)據(jù)庫
self::loadlib(); //加載庫
self::getRouteConfig(); //運行路由并加載控制器
}
引擎里面首先設(shè)置配置文件,再測試系統(tǒng)參數(shù),加載系統(tǒng)模塊,取得配置在的網(wǎng)站信息文件,設(shè)置網(wǎng)站需要的路徑,測試系統(tǒng)配置里面的數(shù)據(jù)庫參數(shù),加載庫文件,最后是加載路由獲取請求地址。不知道這樣的流程對不對,只是我根據(jù)自己的學(xué)習(xí)自己編寫的一套而已,但里面卻缺少緩存,具體緩存應(yīng)該怎么樣的設(shè)置。
這里的數(shù)據(jù)庫測試是根據(jù)配置用哪一類型的數(shù)據(jù)庫,再加載對該類型數(shù)據(jù)庫操作的封裝文件。
三、路由
以下為上面的最后一個函數(shù),加載控制器文件,根據(jù)配置文件獲得請求方式。
復(fù)制代碼 代碼如下:
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('控制器文件不存在');
}
}
四、控制器
控制器文件也蠻簡單,只是根據(jù)路由分析出的地址來加載模型文件和視圖文件,
復(fù)制代碼 代碼如下:
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('此頁未設(shè)置顯示模板!'.$temp);
}
unset($views);
}else{
exit('模型文件不存在:'.$url.'.model.php');
}
}
}
但里面有個注意的是模型文件里面需要輸出的數(shù)據(jù)全部都是通過views這樣一個類進行輸出,包里視圖文件里面所有的系統(tǒng)參數(shù)等。不知道,這種方法是不是顯示得多此一舉,原來是想把所有要輸出的數(shù)據(jù)進行封裝。
其它的模板文件也都是用類進行了封裝,具體怎么寫高人應(yīng)該都知道了吧,這些只是我的個人見解,但是緩存應(yīng)該怎么寫,現(xiàn)在還是一個模糊的概念,是不是在讀取數(shù)據(jù)的時候,方向應(yīng)該是讀取緩存,然后再判斷緩存是否存在,再判斷是否需要建立緩存呢?具體操作方法還是不是很明白。希望能有高人指點指點。
相關(guān)文章
PHP程序61條面向?qū)ο蠓治鲈O(shè)計的經(jīng)驗小結(jié)
你不必嚴(yán)格遵守這些原則,違背它們也不會被處以宗教刑罰。但你應(yīng)當(dāng)把這些原則看成警鈴,若違背了其中的一條,那么警鈴就會響起 。 ----- Arthur J.Riel2008-11-11PHP連接及操作PostgreSQL數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了PHP連接及操作PostgreSQL數(shù)據(jù)庫的方法,結(jié)合實例形式分析了php針對PostgreSQL數(shù)據(jù)庫的基本連接以及增刪改查等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01php偽協(xié)議實現(xiàn)命令執(zhí)行詳情
這篇文章主要介紹了php偽協(xié)議實現(xiàn)命令執(zhí)行詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的朋友可以參考一下2022-06-06php使用number_format函數(shù)截取小數(shù)的方法分析
這篇文章主要介紹了php使用number_format函數(shù)截取小數(shù)的方法,結(jié)合實例形式分析了number_format函數(shù)進行浮點數(shù)數(shù)學(xué)運算的相關(guān)技巧,需要的朋友可以參考下2016-05-05