正規表現の制約設定
Laravelでは、ルートを定義するファイルroutes/web.php
に正規表現を利用してルート定義できます。ルートインスタンスのwhere
メソッドを使用しましょう。
第1引数に制約設定をしたいパラメータ名、第2引数に正規表現を記入します。
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
・ name
パラメータは、小文字a~z、大文字A~Zで1文字以上であること
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
・ id
パラメータは、数字0~9で1文字以上であること
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
・id
パラメータは、数字0~9で1文字以上であること
・name
パラメータは、小文字a~zで1文字以上であること
例3ではwhere
メソッドに連想配列を入れて制約設定を行っています。
キーにパラメータ名、値に正規表現という感じです。
上記の各々の例を参考に、パラメータの制約が設定できます。「自分で定めた設定のパラメータを正規表現で設定したいんや~!」というときに、このwhere
メソッドを活用しましょう。
グローバル制約
ルート定義ファイルroutes/web.php
にwhere
メソッドを使用して、1個ずつルートの制約設定をするのも良いですが、指定した正規表現を、ルート定義した全部のルートパラメータに適応させたい場合はapp/Providers/RouteServiceProvider.php
のboot
メソッド内で設定を行いましょう。
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
Route::pattern('id', '[0-9]+'); // 追加した部分
parent::boot();
}
Route::pattern('id', '[0-9]+');
の部分を追加することで、id
パラメータを使用している全ルートで、自動的に「0~9の数字で1文字以上」という制約がかかります。