【初心者向け】Laravelのルーティングにはnameを指定したい
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel のルーティングの書き方については、以前このような記事を書きました。
上記の記事では、これを覚えて使えば、ほぼほぼ問題がないという書き方についてまとめたものです。
そこから派生して、ルーティングに name を付ける方法について書いていきます。
⇨ ログイン認証したユーザーだけが使えるルーティングの書き方
⇨ 複数の middleware を指定したルーティングの書き方
なぜ name をつけるのか
サービスを作っていると、URL を変更したくなるときが発生します。
例えば、ユーザビリティや管理のしやすさ、URL の階層の変更などです。
そういったときに、name を指定しておくと、web.php だけ変更すれば対応する URL が勝手に変更されることになります。
基本的な書き方
基本的なコードがこれです。
Route::get('/home', 'HomeController@index')->name('home');
これが name を指定した書き方となります。
前回の記事では
Route::get('/home', 'HomeController@index');
だったと思うのですが、それに->name('home')を付け加えただけとなります。
この home に該当する部分は、完全に任意の文字をこちらで付けて良いですが、開発現場の方向性、命名規則に乗っ取ったものを記述します。
name で階層を付けるときは、
->name('post.index')
このように「.」を使って階層を作ります。
基本的な呼び出し方
route('home')
route('post.index')
などで呼び出すことができます。
実際の例としては、
a タグのリンクに指定する場合
<a href="{{ route('home') }}">ホーム</a>
form に使う
<form methods="GET" action="{{ route('home') }}">
</form>
Controller の中で使う
return redirect()->route('home');
const home_url = route('home');
こんな感じで呼び出すことができます。
たまにある勘違い
Laravel は、他の機能で階層を指定するときに、「post/index」の階層を「post.index」で書くことができる、みたいなことがあります。
ですが、ルーティングの name に関しては、それが許されず、完全に一致しないと動きません。
例えば、name('post.index')のとき
×route('post/index')
○route('post.index')
となります。
まとめ
以上が、Laravel のルーティングで name を指定する方法と、ルーティングを指定した方が良い理由となります。
初学者の方は、色々な記事があるので大変だと思いますが、name を指定するかしないかで迷ったら、「指定する」でいいと思います。
何か訂正箇所などありましたら、Twitter の DM で教えていただければと思います。
最後まで読んでいただきありがとうございました。