這一切的一切都得從“Hello world”說起!!! 有很多東西在thinkPHP的官方開發文檔上其實都有講到,我在這裡只是想記錄自己每天堅持學習PHP的情況,今天接觸ThinkPHP的路由,路由這一塊可以更好的隱藏我們網站的結構,讓我們的網站更安全,這是路由帶給我們的一些好處。下麵來記錄Thin ...
這一切的一切都得從“Hello world”說起!!!
有很多東西在thinkPHP的官方開發文檔上其實都有講到,我在這裡只是想記錄自己每天堅持學習PHP的情況,今天接觸ThinkPHP的路由,路由這一塊可以更好的隱藏我們網站的結構,讓我們的網站更安全,這是路由帶給我們的一些好處。下麵來記錄ThinkPHP中的路由這一塊主要內容。
一、配置路由
在ThinkPHP框架中找到路由目錄下的php文件,系統預設會給我們一個route.php的這個文件,當然我們也能在這個目錄下創建自己的一個路由文件,系統會自動載入這個目錄下的所有文件
這個就是路由的文件
ThinkPHP的目錄結構
二、配置一個簡單路由規則
/** *配置一個簡單的路由規則 第一個參數自定義 第二個參數依次是模塊/控制器/方法 * ------->路由執行是從方法開始找,接著找控制器,再是模塊 若不填寫:系統預設使用配置文件中所配置的預設 * 可以在配置文件app.php中配置預設的模塊、控制器和方法 */ Route::rule('good','index/index/index');
這時在瀏覽器中只需要輸入“http://功能變數名稱/good” 就能找到指定的模塊下的控制器中的方法,也可在後方加.html,需要在配置文件app.php中設置URL偽靜態的尾碼,預設為html
三、路由表達式
//動態路由 //id為動態獲取的,也就是在good/後面隨意輸入都可以路由到index/index/index Route::rule('good/:id','index/index/index'); //當然id裡面的值也是可以獲取的 //在控制器中使用門面下的Request中的param('id')可以獲取id的值 Route::rule('good/[:id]','index/index/index');
//路由地址 直接路由到操作方法
//看起來似乎和前面的沒什麼不同,本質的區別是直接執行某個控制器的方法,不需要去解析模塊/控制器/操作方法這些,同時不會去初始化模塊
Route::rule('good','@index/index/index');
四、路由重定向
比如說重定向到百度:
//重定向到百度 Route::rule('baidu','https://www.baidu.com');
五、路由請求類型
請求類型通常有:post、get、delete、put、等請求,路由請求類型可以指定某些請求來請求某個模塊下的某個控制器中的某個方法
//post請求預設模塊/預設控制器/預設方法 Route::rule('good','','post'); Route::post('good',''); //get、delete等請求都與上類似 //設置多個請求類型 Route::rule('good','','post|get|delete|put');
六、路由參數
下表從官方文檔拿下來的一個參數、說明和對應的方法名
參數 | 說明 | 方法名 |
---|---|---|
method | 請求類型檢測,支持多個請求類型 | method |
ext | URL尾碼檢測,支持匹配多個尾碼 | ext |
deny_ext | URL禁止尾碼檢測,支持匹配多個尾碼 | denyExt |
https | 檢測是否https請求 | https |
domain | 功能變數名稱檢測 | domain |
before | 前置行為(檢測) | before |
after | 後置行為(執行) | after |
merge_extra_vars | 合併額外參數 | mergeExtraVars |
complete_match | 是否完整匹配路由 | completeMatch |
model | 綁定模型 | model |
cache | 請求緩存 | cache |
param_depr | 路由參數分隔符 | depr |
ajax | Ajax檢測 | ajax |
pjax | Pjax檢測 | pjax |
response | 綁定response_send行為 | response |
validate | 綁定驗證器類進行數據驗證 | validate |
header | 設置Response的header信息 | header |
append | 追加額外的參數(5.1.5+ ) |
append |
middleware | 註冊路由中間件(5.1.6+ ) |
middleware |
merge_rule_regex | 合併路由規則(V5.1.6+ ) |
mergeRuleRegex |
filter | 請求變數過濾(V5.1.16+ ) |
filter |
這裡舉個路由參數的例子:
Route::rule('good','') ->ext('html') ->https(false); //ext()設置偽靜態尾碼 //https()是否驗證https請求
七、閉包支持
舉個hello world的慄子,這一切的一切都得從“Hello world”說起
//閉包支持 Route::rule('good',function (){ return "Hello world"; });
八、URL生成
配置好路由之後給這個路由一個名字,然後在其它的地方調用助手函數url()或者使用門面下的build方法可獲取對應的url地址
Route::rule('good','')->name('new_good'); //通過助手函數的方式獲取url //url('new_good'); //通過門面下的Url中的build方法 //Url::build('new_good');