この記事はmiriwoお一人様 Advent Calendar 2022の1日目の記事です
概要
- ルートネームに紐づくルーティング情報が存在するかを確認する方法をまとめる。
方法
-
Route::has()
を用いる。 -
下記の様に記載するで紐づくルーティング情報が存在すればtrueを、存在しない場合falseを返す。
use Illuminate\Support\Facades\Route; Route::has('ルートネーム')
-
ルートネームに紐づくルーティング情報がなかった時にエラーを投げるような処理に使える。
use Illuminate\Support\Facades\Route; if (!Route::has('ルートネーム')) { //エラー投げる処理 }
余談
-
上記の方法を知るまで、
route()
関数を使おうと思っていた。 -
route()
関数は存在しないルートネームを引数に指定した場合、Symfony\Component\Routing\Exception\RouteNotFoundException
を返す。これをtryCatch文で検知しようと思っていた。Symfony\Component\Routing\Exception\RouteNotFoundException with message 'Route [ルートネーム] not defined.'
-
しかし
route()
関数は引数のルートネームに紐づくルーティングにパスパラメーターが含まれていた場合、第二引数で配列で渡してあげないとURLを生成できない。 -
ルートネームに紐づくルーティングがあったとしてもパスパラメーターが含まれるルーティング情報の場合、引数をわたさないと
Symfony\Component\Routing\Exception\RouteNotFoundException
を返すのでちょっと面倒
謝辞
- 本内容は弊社の先輩エンジニアさんに教えていただきました。本当にありがとうございます!
- 自身で日本語で検索した時は全然ヒットしなかった旨を先輩に伝えたところ「英語で検索したほうが情報量多いよ。今回だと
laravel route name exist check
とか!単語並べるだけでもヒットするよ!」と教えていただきました!本当にありがとうございます!
参考文献