久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

自制PHP框架之路由與控制器

本文給大家介紹的是自制php框架的第一步,學(xué)會(huì)使用路由和控制器,非常的詳細(xì),有需要的小伙伴可以參考下

我們?yōu)槭裁匆褂寐酚桑吭?:一個(gè)更漂亮的URI

1.URI的改進(jìn)

剛剛開始學(xué)PHP時(shí),我們一定寫過blog.php?id=1之類的URI,使用GET方式獲取參數(shù)。這樣的URI有兩個(gè)缺點(diǎn),一是容易被SQL注射攻擊,二是維護(hù)性可讀性差,大家可以比較下面兩種URI哪一種更具備可讀性。

www.mysite.com/blog.php?id=1

上面URI是我們初學(xué)PHP最常用的。

www.mysite.com/blog/1

這種URI是目前最流行的URI,舉個(gè)例子,比如很多讀書類,電影類網(wǎng)站,都使用了這樣的URI,這樣的URI要比index.php?a=1&b=2&c=3&d=4....要簡潔很多。

2.實(shí)現(xiàn)方法

在WEB項(xiàng)目的根目錄下寫一個(gè).htaccess文件

RewriteEngine On

RewriteRule ^([a-zA-Z0-9/]*)$ index.php/$1

重寫規(guī)則,讓域名后面的字符串直接做為一個(gè)參數(shù)傳入index.php,這樣index.php就成為了你整個(gè)WEB應(yīng)用的中心,定義了“請求和響應(yīng)的映射”。

原因2:單一入口機(jī)制的易維護(hù)性

1.路由數(shù)組

一個(gè)PHP初學(xué)者,剛開始做項(xiàng)目,項(xiàng)目做著做著規(guī)模做大了,常常這個(gè)PHP頁面給另一個(gè)PHP頁面用GET方法傳值,有時(shí)傳的值還不止一個(gè),時(shí)間一久,你的WEB項(xiàng)目,N個(gè)PHP頁面宛如一個(gè)復(fù)雜的蜘蛛網(wǎng),讓你難以維護(hù)。一旦有修改,會(huì)涉及很多PHP文件,工作量很大。

MVC的單一入口機(jī)制可以解決維護(hù)難的問題,路由就是一套映射,可以讓你一個(gè)URI對應(yīng)一個(gè)方法。

$route=[

  ''=>'IndexController@Index',

  'blog'=>'BlogController@Show',

  'blog/{id}/{name}'=>'BlogController@Show',

];

2.獲取參數(shù)

$path=$_SERVER['PATH_INFO'];

$path=ltrim($path,'/');

echo $path.PHP_EOL;

我們在瀏覽器里輸入:www.mysite.com/blog/1后,path變量為/blog/1。使用ltrim函數(shù)刪除左邊的斜杠,然后使用explode把字符串拆解成數(shù)組。

$path_arr=explode('/', $path);

核心代碼如下:

if(isset($_SERVER['PATH_INFO'])){

  $path=$_SERVER['PATH_INFO'];

  $path=ltrim($path,'/');

  $path_arr=explode('/', $path);

}

 

if(isset($path_arr[0])){

  $key=$path_arr[0];

  unset($path_arr[0]);

}

else{

  $key='';

}

 

if(isset($path_arr[1])){

  $parameters=array_values($path_arr);

}

 

 

if(isset($route[$key])){

  $arr=explode('@', $route[$key]);

   

  $controller=new $arr[0];

  $action=$arr[1];

   

  if(isset($parameters)){

    $controller->$action($parameters);

  }

  else{

    $controller->$action();

  }  

}

else{

  require 'error.html.php';

}

unset函數(shù)可以銷毀數(shù)組中key和value,但是并不會(huì)重建索引,所以path_arr[0]是要調(diào)用的控制器類和方法名,path_arr[1]或者path_arr[1..N]就作為傳入方法的參數(shù)。

重定向和錯(cuò)誤頁面是WEB系統(tǒng)中最常見的,如果不用路由機(jī)制,你可能要沒完沒了的重復(fù)寫重定向或者錯(cuò)誤頁面的顯示或者跳轉(zhuǎn)代碼,有了路由,只需要一句話就可以完成。

原因3:減少資源的消耗

MVC采用了控制器(controller)來響應(yīng)請求(request),每次請求來時(shí),應(yīng)該在指定的一個(gè)PHP文件中初始化這個(gè)控制器,而不是分別在不同的PHP文件中做初始化工作,這樣可以減少資源的消耗。

是不是一定要用控制器?方案1:不用控制器

我們現(xiàn)在路由數(shù)組里添加一項(xiàng),value不是一個(gè)字符串,而是一個(gè)匿名函數(shù)(Closure)

$route=[

  ''=>'Index',

  'blog'=>'BlogController@Show',

  'blog/{id}/{name}'=>'BlogController@Show',

  'f'=>function(){echo 'hello';}

]; 

這里的route[f]是一個(gè)匿名函數(shù),并不是一個(gè)控制器類的方法,所以,我們要把上一節(jié)路由代碼做一下修改:

if(isset($route[$key])){

  if($route[$key] instanceof Closure){

    $route[$key]();

  }

  else{

    $arr=explode('@', $route[$key]);  

    $controller=new $arr[0];

    $action=$arr[1];  

    if(isset($parameters)){

      $controller->$action($parameters);

    }

    else{

      $controller->$action();

    }

  }

}

else{

  require 'error.html.php';

}

方案2:使用控制器

自制PHP框架之路由與控制器

每一次都require一個(gè)html頁面是一件很不優(yōu)雅的事情,所以我們寫一個(gè)render函數(shù)

function render($path,array $args){

  extract($args);

  require($path);

}
【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 99精品国产一区二区青青牛奶 | a毛片| 黄免费看| 自拍偷拍亚洲一区 | 亚洲欧美综合精品久久成人 | 亚洲成人三级 | 成人毛片视频免费 | 午夜精品一区二区三区在线视频 | 亚洲电影在线播放 | 一区二区精品 | 国内在线视频 | 91在线精品播放 | 欧美精品一区二区三区四区 在线 | 性高湖久久久久久久久aaaaa | 欧美激情精品久久久久久 | 天天操天天干天天透 | 久久久性色精品国产免费观看 | 国产精品高清在线 | 日本成人在线播放 | 成人小视频在线观看 | 国产成都精品91一区二区三 | 久久久久久一区 | 欧美性jizz18性欧美 | 爱爱视频在线观看 | 一区二区三区网站 | 国内精品视频在线 | 亚洲成人久久久 | 久久人人爽人人爽 | 日韩视频一区二区 | 你懂的免费在线 | 欧美美女爱爱视频 | 欧美色综合一区二区三区 | 亚洲97 | 亚洲精选一区二区 | 欧美日韩亚洲国产 | 欧美一区二区激情三区 | 91精品久久久久久久久久入口 | 91传媒在线观看 | 中文精品视频 | 美女一区二区在线观看 | 国产精品日日摸夜夜添夜夜av |