[原創]有關PHP 中 MVC的個人見解


經過近一個月對MVC的研究,自己也通過網上有朋友的指導,有了一套自己的MVC流程及框架,但是感覺缺限還是很多,靈活性方面還是欠缺,但又不知道怎么樣的具體改進,今天我就把我的流程及思想發布,希望有高人能夠指點指點。

一、入口

入口文件可以是單文件也可以是多文件,我現在用的基本屬多文件,但是入口文件內容基本都是一樣,為以后的修改其它的入口方式做基礎,

1 <?php 
2     require 'command/config.php';
3     require 'command/app.php';
4     app::run($config);
5 ?>

首先不用說大家也看得出來,加載系統配置文件,然后通過引擎來加載系統配置。

二、引擎

 1     public function run($config){
 2         header("Content-type:text/html;charset=utf-8");
 3         self::$config = $config;    //加載系統配置
 4         self::copyright();
 5         self::testsystem();            //系統環境
 6         self::setsystem();            //設置系統參數
 7         self::incinfo();
 8         if(!keheng_IN_WEB){exit('網站正關閉維護中,請稍候訪問!');}
 9         defined('KEHENG_DEBUG') or define('KEHENG_DEBUG',true); // 是否調試模式
10         
11         self::setpath();            //設置系統路徑
12         self::getdatabase();        //測試數據庫
13         self::loadlib();            //加載庫
14         self::getRouteConfig();        //運行路由並加載控制器
15     }

引擎里面首先設置配置文件,再測試系統參數,加載系統模塊,取得配置在的網站信息文件,設置網站需要的路徑,測試系統配置里面的數據庫參數,加載庫文件,最后是加載路由獲取請求地址。不知道這樣的流程對不對,只是我根據自己的學習自己編寫的一套而已,但里面卻缺少緩存,具體緩存應該怎么樣的設置。
這里的數據庫測試是根據配置用哪一類型的數據庫,再加載對該類型數據庫操作的封裝文件。

三、路由

以下為上面的最后一個函數,加載控制器文件,根據配置文件獲得請求方式。

 1 public function getRouteConfig(){
 2         $route_type=self::$config[route][url_type];
 3         switch($route_type){
 4             case 1:
 5                 //echo $_SERVER['SCRIPT_NAME'].'<br />';
 6                 $query_string=$_SERVER['QUERY_STRING'];
 7                 //echo $_SERVER['REQUEST_URI'].'<br />';
 8                 $urlstr=$_GET['controller'];
 9                 break;
10             case 4:
11                 $url = end(explode('/', $_SERVER["PHP_SELF"]));
12                 $urlstr = strtolower(substr($url,0,-4));
13                 break;
14             
15         } 
16         if(file_exists(Contr_DIR.'Controller.php')){
17             require Contr_DIR.'Controller.php';
18             //echo $urlstr;
19             $template = self::$config['Templates'];
20             controller::load($urlstr,$template);
21         }else{
22             exit('控制器文件不存在');
23         }
24     
25     }

四、控制器

控制器文件也蠻簡單,只是根據路由分析出的地址來加載模型文件和視圖文件,

 1 class controller{
 2     public $obj;
 3     public function load($url,$template){
 4         
 5         $config=$template;
 6         if(file_exists(Model_DIR.$url.'.model.php')){
 7             $views = new views;
 8             //echo Model_DIR.$url.'.model.php';
 9             require Model_DIR.$url.'.model.php';
10             $temp = $config[$url][0];
11             if($temp!='' && $temp!=null && isset($temp)){
12                 if(file_exists(Templ_DIR.$temp)){
13                     //echo Templ_DIR.$temp;
14                     require Templ_DIR.$temp;
15                 }else{
16                     exit('視圖文件不存在!'.$temp);
17                 }
18             }else{
19                 exit('此頁未設置顯示模板!'.$temp);
20             }
21             unset($views);
22         }else{
23             exit('模型文件不存在:'.$url.'.model.php');
24         }
25     }
26 }


但里面有個注意的是模型文件里面需要輸出的數據全部都是通過views這樣一個類進行輸出,包里視圖文件里面所有的系統參數等。不知道,這種方法是不是顯示得多此一舉,原來是想把所有要輸出的數據進行封裝。

 轉載請注明出處:http://www.cnblogs.com/keheng/archive/2012/05/17/2506155.html     作者:[九狐科技]keheng

其它的模板文件也都是用類進行了封裝,具體怎么寫高人應該都知道了吧,這些只是我的個人見解,但是緩存應該怎么寫,現在還是一個模糊的概念,是不是在讀取數據的時候,方向應該是讀取緩存,然后再判斷緩存是否存在,再判斷是否需要建立緩存呢?具體操作方法還是不是很明白。希望能有高人指點指點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM