1. 程式人生 > >thinkphp 5.1 路由規則

thinkphp 5.1 路由規則

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+']);