PHP框架之路由與控制器
我們為什麼要使用路由?
原因1:一個更漂亮的URI
1.URI的改進
剛剛開始學PHP時,我們一定寫過blog.php?id=1之類的URI,使用GET方式獲取參數。這樣的URI有兩個缺點,一是容易被SQL注射攻擊,二是維護性可讀性差,大家可以比較下面兩種URI哪一種更具備可讀性。
上面URI是我們初學PHP最常用的。
這種URI是目前最流行的URI,舉個例子,比如很多讀書類,電影類網站,都使用了這樣的URI,這樣的URI要比index.php?a=1&b=2&c=3&d=4....要簡潔很多。
2.實現方法
在WEB項目的根目錄下寫一個.htaccess文件
重寫規則,讓域名後面的字元串直接做為一個參數傳入index.php,這樣index.php就成為了你整個WEB應用的中心,定義了「請求和響應的映射」。
原因2:單一入口機制的易維護性
1.路由數組
一個PHP初學者,剛開始做項目,項目做著做著規模做大了,常常這個PHP頁面給另一個PHP頁面用GET方法傳值,有時傳的值還不止一個,時間一久,你的WEB項目,N個PHP頁面宛如一個複雜的蜘蛛網,讓你難以維護。一旦有修改,會涉及很多PHP文件,工作量很大。
MVC的單一入口機制可以解決維護難的問題,路由就是一套映射,可以讓你一個URI對應一個方法。
2.獲取參數
我們在瀏覽器里輸入:www.mysite.com/blog/1後,path變數為/blog/1。使用ltrim函數刪除左邊的斜杠,然後使用explode把字元串拆解成數組。
核心代碼如下:
unset函數可以銷毀數組中key和value,但是並不會重建索引,所以path_arr[0]是要調用的控制器類和方法名,path_arr[1]或者path_arr[1..N]就作為傳入方法的參數。
重定向和錯誤頁面是WEB系統中最常見的,如果不用路由機制,你可能要沒完沒了的重複寫重定向或者錯誤頁面的顯示或者跳轉代碼,有了路由,只需要一句話就可以完成。
原因3:減少資源的消耗
MVC採用了控制器(controller)來響應請求(request),每次請求來時,應該在指定的一個PHP文件中初始化這個控制器,而不是分別在不同的PHP文件中做初始化工作,這樣可以減少資源的消耗。
是不是一定要用控制器?
方案1:不用控制器
我們現在路由數組裡添加一項,value不是一個字元串,而是一個匿名函數(Closure)
這裡的route[f]是一個匿名函數,並不是一個控制器類的方法,所以,我們要把上一節路由代碼做一下修改:
方案2:使用控制器
每一次都require一個html頁面是一件很不優雅的事情,所以我們寫一個render函數
接上一篇博客,我們知道每個URI對應了一個方法,但是我們常常遇到這樣的問題:
用不用控制器,取決於你的業務複雜度。個人建議使用控制器,但是對於業務很簡單的頁面跳轉或檢查,可以直接寫在一個匿名函數里。
控制器里寫些什麼?
我們也許寫過這樣的代碼:
這樣把界面的代碼嵌入的寫法是非常難以維護的,也是很多開發人員(包括我)最厭惡的寫法,因為這種寫法並沒有做好界面與業務邏輯的分離,所以我們需要使用視圖。
每一次調用控制器的某個方法時,render函數都會把參數以關聯數組的形式傳入,做到「業務邏輯」和「表現」的淺層次分離,但是這種分離還不是最好的,因為前端開發人員仍然需要面對甚至處理PHP代碼,後端開發人員也有和前端人員溝通的成本,所以後面某一節,會再談一種更好的分離方式。
點擊展開全文
※李開復對話劉長銘直播取消通知
※20個優秀主頁設計案例
※JavaScript中Object的總結
※高考以後,他們都去學編程了
※PHP修改圖片
TAG:優才學院 |
※單臂路由與DHCP
※PC端MPA和移動端SPA的路由同構
※PHICOMM K3 路由器拆解
※DIY家用伺服器:PT下載機、媒體伺服器、NAS、軟路由、照片同步
※TP-LINK雙頻無線路由:路由器也可以很時尚
※精品家用路由器對比 榮耀路由Pro 2 VS小米路由器HD
※AP與路由器區別? 為何無線 AP比無線路由器要貴?
※CCNA-動態路由RIP
※無線AP和無線路由器的區別
※華為路由器配置RIP路由協議全攻略
※路由器設置MAC地址過濾防止WIFI盜用
※詳細解釋路由器三種無線連接方式,WISP、Client+AP、WDS的區別
※路由器LAN-WAN級聯,增強無線信號,擴大覆蓋範圍
※路由器——P2P的高科技包裝
※TP-Link新推網狀網路由器 可控制智能家居設備
※路由器維修之小米路由R3P刷breed變磚修復
※路由協議之OSPF的概述
※在手機和筆電之後 雷蛇又推出遊戲路由器SILA
※對ISP級路由器的大型加密攻擊蔓延全球
※AMD K8/Zen架構之父加盟Intel;蘋果宣布退出無線路由市場…