在ThinkPHP中我們使用偽靜態的時候會產生一些問題,從而不能夠很方便在用apache的rewrite規則來解決,不過官方因為這個問題給大家提供了一種高級解決方案就是route
我在使用ThinkPHP做項目的時候遇到這樣的事情 route的規則是要匹配一下控制器
這就是官方在路由的例子里面為什么不使用別的方式,我也納悶官方為什么沒有解決這個問題
看官方的例子,然后我在寫我的需求
"URL_ROUTER_ON" => true, "URL_MAP_RULES"=>array( "new/top" => "news/index/type/top" )
你看官方的這個例子,就是解決的new控制器下top路徑重寫的問題
再看一個
"/^new/(d{4})/(d{2})$/" => "News/achive?year=:1&month=:2", "new/:year/:month/:day"=>"News/read", // 靜態地址和動態地址結合
這個也是必須匹配new 這個控制器
第一個路由匹配的網址基本上都http://www.xxx.com/new/top
第二個路由匹配的網址是http://www.xxx.com/new/5/3
第三個路由匹配的網址是http://www.xxx.com/new/2014/4/5
其他的官方例子不說了
我們的需求呢?我們的需求是不體現控制器我們要的是這樣子的網址 http://www.xxx.com/getMember.html 包括http://wwww.xxx.com/getMember/username/xxxxx.html http://www.xxx.com/1.html 包括http://www.xxx.com/1-1.html http://www.xxx.com/getContent/1.html
我們需要的,官方提供的這些常規方式都無法解決怎么辦,不要著急,官方還提供了一種辦法叫做閉包支持
這就是我今天所要說的終極路由解決方案————ThinkPHP超級偽靜態模式。
其實要匹配/getMember或者匹配/getContent我們在正則中都很方便只需要一個^get(w{2,5})[^/]這樣就能匹配了, 更超級的方式是get(w+[^/])這樣就可以匹配了,下面開始說閉包支持——終極路由解決方案
還是先放官方的例子
"URL_ROUTE_RULES"=>array( "test" => function(){ echo "just test"; }, "hello/:name" => function($name){ echo "Hello,".$name; })
這是第一個,這樣訪問的時候你訪問xxx/hellow/hainuo會發現瀏覽器只輸出了 Hello,hainuo別的什么都沒有
"/^new/(d{4})/(d{2})$/" => function($year,$month){ echo "year=".$year."&month=".$month; }
這個例子也沒有什么好說的,就是輸出year=2015&month=6
這都不是我們需要的,難道閉包后就不能夠繼續運行后續的程序嗎?
答案是肯定的,一定能支持后續程序運行的。
仔細看官方的示例還會發現,竟然有下面一個支持——我們的終極路由解決方案,超級為靜態模式終于跟大家見面了,
"hello/:name" => function($name){ echo "Hello,".$name."
"; $_SERVER["PATH_INFO"] = "blog/read/name/".$name; return false; } 假設blog控制器中的read操作方法代碼如下: public function read($name){ echo "read,".$name."!
"; }
于是我們就順利的找到了答案
"URL_ROUTE_RULES"=>array( "/get(w+)[^/]"=>function(){ $_SERVER["PATH_INFO"] = "blog/read/name/".$name; return false; }
只需要在路由規則中如下填寫,便ok了,這樣設置后就會出現一個問題使用U方法得到URI將不再是我們所需要的,所以,在有關URI的地方請直接按照上面我們需要的規則填寫。
備注一下:20140609
在閉包支持中,你使用IS_AJAX 會發現他始終為true 不清楚什么原因。這個留待以后研究吧
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/35726.html
摘要:源碼分析開門篇生命周期入口文件用戶發起的請求都會經過應用的入口文件,通常是文件。注冊錯誤和異常機制執行注冊錯誤和異常處理機制。由三部分組成應用關閉方法錯誤處理方法異常處理方法注冊應用關閉方法是為了便于攔截一些系統錯誤。 源碼分析—開門篇 thinkphp生命周期 1、入口文件 用戶發起的請求都會經過應用的入口文件,通常是 ==public/index.php==文件。當然,你也可以更改...
摘要:簡介是一個免費開源的,快速簡單的面向對象的輕量級開發框架,因為其易用性擴展性,已經成長為國內頗具影響力的應用開發框架漏洞解析漏洞引發的原因是框架對控制器名沒有進行足夠的檢測,現拉取來進行測試請求路由系統解析為模塊控制器方法參數列表跟蹤到 ThinkPHP 簡介 ThinkPHP 是一個免費開源的,快速、簡單的面向對象的輕量級PHP開發框架,因為其易用性、擴展性,已經成長為國內頗具影響力...
摘要:靜態作用域與動態作用域靜態作用域函數的作用域基于函數創建的位置。采用的是詞法作用域,也稱為靜態作用域。可以劫持整個對象,并返回一個新的對象。防誤觸延緩執行立即執行節流所謂節流,就是指連續觸發事件但是在秒中只執行一次函數。 在這里記錄著每天自己遇到的一道印象深刻的前端問題,以及一道生活中隨處可見的小問題。 強迫自己形成積累的習慣,鞭撻自己不斷前行,共同學習。 Github 地址 2019...
摘要:靜態作用域與動態作用域靜態作用域函數的作用域基于函數創建的位置。采用的是詞法作用域,也稱為靜態作用域。可以劫持整個對象,并返回一個新的對象。防誤觸延緩執行立即執行節流所謂節流,就是指連續觸發事件但是在秒中只執行一次函數。 在這里記錄著每天自己遇到的一道印象深刻的前端問題,以及一道生活中隨處可見的小問題。 強迫自己形成積累的習慣,鞭撻自己不斷前行,共同學習。 Github 地址 2019...
閱讀 3355·2021-11-25 09:43
閱讀 3149·2021-10-11 10:58
閱讀 2751·2021-09-27 13:59
閱讀 3084·2021-09-24 09:55
閱讀 2175·2019-08-30 15:52
閱讀 1837·2019-08-30 14:03
閱讀 2264·2019-08-30 11:11
閱讀 2029·2019-08-28 18:12