這一切的一切都得從“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');