Learn or Die

生涯勉強。Macです。

パラメータのフォーマットを制約する

正規表現制約

ルートインスタンスのwhereメソッドを使用し、引数に正規表現を指定する。
例)1-12の数字であるパラメータを許可するルート

<?php

Route::get('/horoscope/{zodiac_id}',    'Mypage\HoroscopeController@show')->name('mypageHoroscopeDetail')->where('zodiac_id', '[1-12]+');  

複数指定の場合▼

<?php

Route::get('/horoscope/{zodiac_id}/{zodiac_name}',  'Mypage\HoroscopeController@show')
->name('mypageHoroscopeDetail')
->where(['zodiac_id' => '[1-12]+', 'zodiac_name' => '[a-z]+']);

グローバル制約

指定した正規表現でいつもルートパラメータを制約したい場合は、patternメソッドを使う。
パターンを定義すると、パラメータ名を使用している全ルートで、自動的に提供される。

RouteServiceProviderのbootメソッド▼

<?php

public function boot()
{
    Route::pattern('id', '[1-12]+');

    parent::boot();
}

参考サイト

readouble.com