現如今PHP已經是廣為使用的一種程式語言,只要是做PHP開發都離不開一些PHP框架,開發框架為我們提供了靈活的開發方式,MVC層分離,業務解耦等等,讓我們的開發更為快速方便。但很多人只是會使用框架,卻從來不去了解框架的內部是如何實現的,這對我們程式設計能力的提升是沒有一點用處的。那麼這篇文章,我們就先來一個簡單點的功能,也就是說說 一般的單入口框MVC框架的路由功能實作方法。架路由都是這樣的結構:localhost/MVC/index.php/classname/functionname/var1/var2。這裡的index.php通常被我們稱為入口文件。對於伺服器而言,你這裡訪問的就只有index.php 後面呼叫的controller 和裡面的方法,甚至傳值都是在框架內部基於PHP層面實現的。下面我們就來簡單的實作MVC框架路由功能。
1、首先,建立好MVC檔案結構
#下面我們就來動手試試,怎麼才能存取controllers裡面的文件。
在index.php裡面輸入以下內容:
<?php /** * MVC路由功能简单实现 * @desc 简单实现MVC路由功能 * $Author: Zhihua_W */ //打印出所有的服务器变量 print_r($_SERVER); ?>
然後輸入存取位址試試看。這裡我是用本地環境的,我造訪的位址是:localhost/MVC/index.php/class/function/var1。下面我貼出兩個最重要的變數:
[REQUEST_URI] => /MVC/index.php/class/function/var1 [SCRIPT_NAME] => /MVC/index.php
2、index.php檔案內容
<?php /** * MVC路由功能简单实现 * @desc 简单实现MVC路由功能 * $Author: Zhihua_W */ //定义application路径 define('APPPATH', trim(__DIR__ . '/')); //获得请求地址 $root = $_SERVER['SCRIPT_NAME']; $request = $_SERVER['REQUEST_URI']; $URI = array(); //获得index.php 后面的地址 $url = trim(str_replace($root, '', $request), '/'); //如果为空,则是访问根地址 if (empty($url)) { //默认控制器和默认方法 $class = 'index'; $func = 'welcome'; } else { $URI = explode('/', $url); //如果function为空 则默认访问index if (count($URI) < 2) { $class = $URI[0]; $func = 'index'; } else { $class = $URI[0]; $func = $URI[1]; } } //把class加载进来 include(APPPATH . '/' . 'application/controllers /' . $class . '.php'); //实例化->将控制器首字母大写 $obj = ucfirst($class); call_user_func_array( //调用内部function array($obj, $func), //传递参数 array_slice($URI, 2) ); ?>
##3、在application/controllers裡面加入下面2個檔案(index.php,hello.php)
① index.php<?php * MVC路由功能简单实现 * @desc 简单实现MVC路由功能 * $Author: Zhihua_W */ class Index { function welcome() { # code... echo "default covtroller!"; } } ?>② hello.php
<?php /** * MVC路由功能简单实现 * @desc 简单实现MVC路由功能 * $Author: Zhihua_W */ class Hello{ public function index(){ echo "hello world!"; } public function name($name){ echo "hello ".$name; } } ?> ] view plain copy <?php /**
4、測試
測試一下看看,能不能訪問了。根據上面的路由結構。我們可以來試試。透過測試我們會發現這個存取正常,正確呼叫了hello這個class內部的name方法,然後把參數jack傳遞過去了。再試試不輸入function name,看看能不能預設呼叫index,答案也是可以的。最後一個就是訪問root位址看看,也是同樣正確的映射到了預設控制器上。 (測試結果圖片就不截圖貼上去了。)上面的案例已經講解完畢, 這樣,一個簡單的MVC路由功能就完成了。 相關推薦:以上是PHP的MVC框架路由功能實作方法。的詳細內容。更多資訊請關注PHP中文網其他相關文章!