用PHP開始你的MVC (一)整合你的網站入口

來源:互聯網
上載者:User
網站

這是一篇介紹如何用php來實現MVC模式開發的檔案。關於MVC模式的技術文章網上隨處可以,所以這篇檔案將不再講述這種模式的優缺點(實際

上是我說不清楚),子講他的php技術實現。並且在以後的系列文章中也是以講技術為主。

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


大家也許經常在網上看到這樣的路徑(http://www.aaa.com/aaa/bbb/aaa?id=5),讓人不解,這樣的網站的實現方式有幾種可能性:
    1、隱藏檔案的副檔名,對這種做法的好處,眾說紛紜,不過個人覺得沒有必要;
    2、用了網站的重新導向規則,實現虛擬路徑;
    3、強制檔案解析的方式,實現虛擬路徑。
用第2\3種方法可以實現網站的統一介面,合理的整合網站,更好的體現網站的安全性和架構,用這兩種方式的網站大多是使用“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> 

檔案1:(test.php)

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

?>
 

檔案2:(GoodControler.php)

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

?>
 

檔案3:(BadControler.php)

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

?>
 

檔案4:(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();
    }
}

?>
 

 



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。