程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP MVC模式開發(一):統一站點入口

PHP MVC模式開發(一):統一站點入口

編輯:關於PHP編程

本文介紹如何用php來實現MVC模式開發的文件。關於MVC模式的技術文章網上隨處可以,所以這篇文件將不再講述這種模式的優缺點(實際上是我說不清楚),只講他的php技術實現。並且在以後的系列文章中也是以講技術為主。

一、實現統一的網站入口(在MVC中調用Controler層的方法,也就是控制層)

大家也許經常在網上看到這樣的路徑(http://www.aaa.com/aaa/bbb/aaa?id=5),讓人不解,這樣的網站的實現方式有幾種可能性:
    1、隱藏文件的擴展名,對這種做法的好處,眾說紛纭,不過個人覺得沒有必要;
    2、用了網站的重定向規則,實現虛擬路徑;
    3、強制文件解析的方式,實現虛擬路徑。
用第23種方法可以實現網站的統一接口,合理的整合網站,更好的體現網站的安全性和架構,用這兩種方式的網站大多是使用“MVC”模式構建和實現的。
下面是一個例子

訪問路徑如下:
      ....../test/*******/Bad
      ....../test/*******/Good
    (其中的"******"可以用任何字符串替換,"......."是你的web路徑)
 文件的目錄結構如下
 |-- .htaccess
 |-- test
 |-- Application.php
 |-- Controler/GoodControler.php
 |-- Controler/BadControler.php

注意 文件".htaccess",在windows下不能直接建立的,可以在命令行模式下建立.
 文件0:(.htaccess)(這個文件是更改apache的配置方式用的)
<files test>
forcetype application/x-httpd-php
</files>

文件 test.php
<?php
/*-------------------------------------
 * test.php
 *
 * 作為你的網站的入口的文件
 * 用來初始化和入口
 * 調用執行Controler的調用
 *
 -------------------------------------*/
require "Application.php";
$aa = new Application();
$aa->parse();
$aa->go();

?>
 
文件GoodControler.php
<?php
/*-------------------------------------
 * GoodControler.php
 *
 * 用來控制 url=/test/Good 來的訪問
 *
 -------------------------------------*/
class GoodControler{
    /*
     * 控制類的調用方法,唯一的報漏給外部的接口
     */
    function control(){
     echo "this is from GoodControler url=*********/test/Good";
    }
}

?>
 
文件 BadControler.php
<?php
/*-------------------------------------
 * BadControler.php
 *
 * 用來控制 url=/test/Bad 來的訪問
 *
 -------------------------------------*/
class BadControler{
    /*
     * 控制類的調用方法,唯一的報漏給外部的接口
     */
    function control(){
     echo "this is from GoodControler url=*********/test/Bad";
    }
}

?>

文件 Application.php
<?php
/*-------------------------------------
 * Application.php
 *
 * 用來實現網站的統一入口,調用Controler類
 *
 -------------------------------------*/
class Application{
//用來記錄所要進行的操作
    var $action;
    //controler文件的路徑名
    var $controlerFile;
    //controler的類名
    var $controlerClass;

    function Application(){
    }

    function parse(){
        $this->_parsePath();
        $this->_getControlerFile();
        $this->_getControlerClassname();
    }
    /*
     * 解析當前的訪問路徑,得到要進行動作
     */
    function _parsePath(){
     list($path, $param) = explode("?", $_SERVER["REQUEST_URI"]);
        $pos = strrpos($path, "/");
        $this->action = substr($path, $pos 1);
    }
    /*
     * 通過動作$action,解析得到該$action要用到的controler文件的路徑
     */
    function _getControlerFile(){
     $this->controlerFile = "./Controler/".$this->action."Controler.php";
        if(!file_exists($this->controlerFile))
         die("Controler文件名(".$this->controlerFile.")解析錯誤");
        require_once $this->controlerFile;
    }
    /*
     * 通過動作$action,解析得到該$action要用到的controler類名
     */
    function _getControlerClassname(){
        $this->controlerClass = $this->action."Controler";
        if(!class_exists($this->controlerClass))
         die("Controler類名(".$this->controlerClass.")解析錯誤");
    }
    /*
     * 調用controler,執行controler的動作
     */
    function go(){
        $c = new $this->controlerClass();
        $c->control();
    }
}
?>
下節講繼續講解PHP 中 MVC模式開發。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved