路由變數規則
路由變數規則
掌握路由規則, 應該具備正規表示式的基本知識
系統預設的變數規則設定是\w ,只會匹配字母、數字、中文和底線字符,並不會匹配特殊符號以及其它字符,需要定義變數規則或調整預設變數規則。
可以在路由設定檔中自訂預設的變數規則,例如增加中劃線字元的符合:
'default_route_pattern' => '[\w\-]+',
支援在規則路由中指定變數規則,彌補了動態變數無法限制具體的類型問題,並且支援全域規則設定。使用方式如下:
局部變數規則
局部變數規則,僅在目前路由有效:
// 定义GET请求路由规则 并设置name变量规则 Route::get('new/:name', 'News/read') ->pattern(['name' => '[\w|\-]+']);
不需要開頭新增^或在最後加上$,也不支援模式修飾符,系統會自動加入。
全域變數規則
設定全域變數規則,全部路由有效:
// 支持批量添加 Route::pattern([ 'name' => '\w+', 'id' => '\d+', ]);
組合變數
如果你的路由規則比較特殊,可以在路由定義的時候使用組合變數。
例如
Route::get('item-<name>-<id>', 'product/detail') ->pattern(['name' => '\w+', 'id' => '\d+']);
組合變數的優點是路由規則中沒有固定的分隔符,可以隨意組合需要的變數規則和分割符,例如路由規則改成如下一樣可以支援:
Route::get('item<name><id>', 'product/detail') ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']); Route::get('item@<name>-<id>', 'product/detail') ->pattern(['name' => '\w+', 'id' => '\d+']);
使用組合變數的情況下如果需要使用可選變量,則可以使用下面的方式:
Route::get('item-<name><id?>', 'product/detail') ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
動態路由
可以把路由規則中的變數傳入路由位址中,就可以實作一個動態路由,例如:
// 定义动态路由 Route::get('hello/:name', 'index/:name/hello');
name變數的值作為路由位址傳入。
動態路由中的變數也支援組合變數及拼裝,例如:
Route::get('item-<name>-<id>', 'product_:name/detail') ->pattern(['name' => '\w+', 'id' => '\d+']);