thinkphp 5.1 路由規則
阿新 • • 發佈:2018-12-12
V5.1.14+
版本開始,可以在app.php
配置檔案中自定義預設的變數規則:
'default_route_pattern' => '[\w\-]+',
支援在規則路由中為變數用正則的方式指定變數規則,彌補了動態變數無法限制具體的型別問題,並且支援全域性規則設定。使用方式如下:
區域性變數規則
區域性變數規則,僅在當前路由有效:
// 定義GET請求路由規則 並設定name變數規則
Route::get('new/:name', 'News/read')
->pattern(['name' => '\w+']);
不需要開頭新增
^
或者在最後新增$
,也不支援模式修飾符,系統會自動新增。
全域性變數規則
設定全域性變數規則,全部路由有效:
// 設定name變數規則(採用正則定義)
Route::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('[email protected]<name>-<id>', 'product/detail') ->pattern(['name' => '\w+', 'id' => '\d+']);
使用組合變數的情況下如果需要使用可選變數,則可以使用下面的方式:
Route::get('item-<name><id?>', 'product/detail')
->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
V5.1.6+
版本開始,路由規則中的變數定義更加靈活,整個路由規則就是一個組合變數設計,例如你可以直接使用下面的路由定義:
Route::get('item/:name-:id', 'product/detail')
->pattern(['name' => '\w+', 'id' => '\d+']);
5.1.6+
版本以上,推薦統一使用<var>
變數方式,效率更高。
動態路由
可以把路由規則中的變數傳入路由地址中,就可以實現一個動態路由,例如:
// 定義動態路由
Route::get('hello/:name', 'index/:name/hello');
name
變數的值作為路由地址傳入。
動態路由中的變數也支援組合變數及拼裝,例如:
Route::get('item-<name>-<id>', 'product_:name/detail')
->pattern(['name' => '\w+', 'id' => '\d+']);