路由變數規則


路由變數規則

掌握路由規則, 應該具備正規表示式的基本知識

系統預設的變數規則設定是\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+']);