LoginSignup
3
2

More than 1 year has passed since last update.

【Laravel】ルートパラメータ制約は「正規表現」よりも「ヘルパメソッド」をお勧めしたい理由

Posted at

ルートパラメータを制約するには?

Laravelは、ルート情報に where メソッドをチェーンして、ルートパラメータに制約をかけることができます。

web.php
// 例1:
// 「name」パラメータはアルファベット大文字か小文字の1文字以上であること
Route::get('/user/{name}', [SampleController::class, 'name'])
    ->where('name', '[A-Za-z]+');
 
// 例2:
// 「id」パラメータは数字1文字以上であること
Route::get('/user/{id}', [SampleController::class, 'id'])
    ->where('id', '[0-9]+');

// 例3:
// 「id」は数字1文字以上かつ「name」はアルファベット小文字の1文字以上
Route::get('/user/{id}/{name}', [SampleController::class, 'id_name'])
    ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

ルートパラメータが1つの場合は、where メソッドの第1引数に「パラメータ名」を、第2引数に「制約の正規表現」を指定します。
ルートパラメータが、上記 例3 のように複数ある場合は、where メソッドの引数を連想配列にして対応できます。

ルートパラメータ制約にヘルパメソッドを推したい理由

さて、このようにルートパラメータの制約をする際は where メソッドを使用するだけでも十分に機能するのですが、この where メソッドを使用しない「ヘルパメソッドを活用した制約」 があるのはご存知でしたか?

whereNumber メソッド

whereNumber メソッドは、1文字以上の数字であること を制約とします。引数にルートパラメータ名を記入します。

web.php
Route::get('/user/{id}', [SampleController::class, 'id'])
    ->whereNumber('id');

whereAlpha メソッド

whereAlpha メソッドは、アルファベットで大文字か小文字の1文字以上であること を制約とします。引数にルートパラメータ名を記入します。

web.php
Route::get('/user/{name}', [SampleController::class, 'name'])
    ->whereAlpha('name');

whereAlphaNumeric メソッド

whereAlphaNumeric メソッドは、アルファベットの大文字もしくは小文字、または数字の1文字以上であること を制約とします。引数にルートパラメータ名を記入します。

web.php
Route::get('/post/{slug}', [SampleController::class, 'slug'])
    ->whereAlphaNumeric('slug');

このように、ヘルパメソッドを活用した制約をチェーンすることで、メソッド名自体が何の制約をするのかが想像できるような名前となっている ので、処理のイメージがより分かりやすくなります。

ぜひ、積極的に使用してみてはいかがでしょうか?(=゚ω゚)ノ

参考URL:
https://laravel.com/docs/9.x/routing
https://readouble.com/laravel/8.x/ja/routing.html

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2