トップページ
Laravel学習サイトLaravelやるばい

目次

Laravelでweb.phpの動的なルート情報をカスタムする方法

みなさんこんにちは、あべいさぢです。

Laravelでweb.phpに下記の記述をしたとします。

Route::get('/root1/{variable}/root2', [DemoController::class, 'demoAction']);

この書き方をすると例えば「root1/1/root2」みたいなURLを指定することになりますが「1」の後ろに動的なパスが入る場合があります。

例えば「root1/1/root2/私」・「root1/1/root2/あなた」・「root1/1/root2/彼」とか。(私・あなた・彼の部分が動的に変わります)

私・あなた・彼の部分に対応できるルート設定を書くのは無限にパターンがあってキリがないです。

こんな場合に全てのルートに対応できる方法があるのでメモとしてこの記事を残します。


whereを使う

「root2」以降を動的な値に変えたいとします。

下記の記述をします。

Route::get('/root1/{variable}/root2', [DemoController::class, 'demoAction'])->where('root2', '.*');

「->where('root2', '.*')」を追記しています。

この書き方をすると「root2以降は何が入ってもいい」という意味になります。

「.*」の「.」は「/を含む任意の文字」という意味で「*」は「0回以上繰り返される」という意味です。

だから「.*」は「任意の文字が0回以上繰り返される」という意味になります。


疑問点

「->where('root2', '.*')」が「root2以降は何が入ってもいい」という意味なら記述を下記にしたいと思いませんか?

Route::get('/root1/{variable}/root2', [DemoController::class, 'demoAction'])->where('root1', '.*');

この記述だと「variable」と「私・あなた・彼」の2ヶ所の変数があるので対応ができません。

whereは1つの変数にしか対応できないのでroot2以降にwhereを使っています。








戻る