現在Laravelの教材を鋭意制作中です!完成まで今しばらくお待ちください

#26 routeとnameの関係

Laravelでの画面遷移には「ルート設定」が欠かせません。そのルートに「名前」を付けることで、URLを意識せずにリンクを作成できるようになります。

例えば、今は /show/{$id} と書いていますが、あとでURLを /contacts/show/{$id} に変更したくなったら、全てのフォームやリンクを探して書き直す必要がありますね?

名前付きルートを使うと、「URLの変更にも柔軟に対応できて」「コードが整理され、保守性も向上」します。

この章では、ルート定義と name() の仕組みを理解しながら、route() ヘルパーでの使い方や、名前付きルートのメリットをわかりやすく整理していきます。

名前付きルートの定義

Laravelでは、ルートに「名前: name() 」を設定しておくことで、コード内で柔軟に使いまわすことができます。

Route::get('/show/{$id}', [ContactController::class, 'store'])->name('show');

->name('show')を作成したルートの後に付けることで、このルートに「show」という名前をつける、と言う意味になります。

これにより、後でリンクを作成するときに、URLではなく名前で指定できるようになります。

名前付きルートを使うと、以下のようにビュー(Blade)テンプレートでリンクを作成できます。

<a href="{{ route('show', $contact->id) }}">詳細</a>

route('show', ...) は、Laravelに「show という名前が付いたルートのURLを生成してね」とお願いする構文になっており、$contact->id は、そのルートに渡すパラメータ(URLの中のID)を表示しています。

なぜ名前付きルートが便利なのか?

ここで、なぜ名前付きのルートが便利なのかまとめておきましょう。

発生した問題 名前付きルートでの解決
URLが変更されたら全て修正が必要 route('〇〇') を使えば変更不要
可読性が低い 意味が伝わる名前を付けられる (contact.confirm, contact.index など)
リンク切れリスク ルート名の整合性でエラーを検出しやすい

では実際に実装してみましょう!

1. pullとブランチの作成

まずは、もうそろそろ定着してきた作業ではありませんか?作業に入る前に前回mergeしたメインブランチを更新しておきましょう。

# ブランチをpullする
git pull origin main

以上で完了です。mainブランチが前章で作成されたブランチと同じになれば、次に進みます。

git switch -C change-name

今回はrouteのnameを変更するので、安直ですがchange-nameと言う名前のブランチを作成しました。ブランチ名は任意となりますので、お好きなブランチ名を付けて構いません。

2.web.phpの修正

まずは、これまで作成したすべての route に対して、name をつけていきましょう。

Route::get('/', [ContactController::class, 'index'])->name('index');
Route::get('/show/{id}', [ContactController::class, 'show'])->name('show');
Route::get('/contact', [ContactController::class, 'contact'])->name('contact');
Route::post('/contact/confirm', [ContactController::class, 'confirm'])->name('contact.confirm');
Route::post('/contact/store', [ContactController::class, 'store'])->name('contact.store');
Route::get('/thanks', [ContactController::class, 'thanks'])->name('thanks');

今回はシンプルに indexshow とつけていますが、この部分は任意で文字をつけられます。

ですので例えば contact.index とか information.show などをつけても対応する route を設定すればその通りに動きます。

設定し終わったら、すべてのリンクを修正する必要があります。ページ数が多いので一つずつ確認しながら進めていってください。

3.index.blade.phpの修正

<td><a href="{{ route('show', $contact->id) }}">詳細</a></td>

<td><a href="/contacts/{{ $contact->id }}">詳細</a></td>の部分を上記に変更してください。

4.show.blade.phpの修正

<a href="{{ route('index') }}">一覧へ戻る</a>

<a href="/">一覧へ戻る</a>の部分を上記に変更してください。

5.contact.blade.phpの修正

<form action="{{ route('contact.store') }}" method="POST">

<form action="/contact/store" method="POST">の部分を上記に変更してください。

6.thanks.blade.phpの修正

<a href="{{ route('thanks') }}">トップページへ戻る</a>

<a href="/">トップページへ戻る</a>の部分を上記に変更してください。

7.app.blade.phpの修正

最後に共通レイアウトのリンクの修正も行います。

<a href="{{ route('index') }}">トップ</a> |
<a href="{{ route('contact') }}">お問い合わせ</a>

<a href="/">トップ</a> | <a href="/contact">お問い合わせ</a>の部分を上記に変更してください。

8.Git push

以上が完了したら、ここでGitを共有しておきましょう。

git add -A
git commit -m "コメントを入力する"
git push origin make-index

git pushが無事完了したら、GitHub上で操作を行います。

pull requestが来ているので、mergeしましょう。

今回は route() と name() の解説のためにわざわざ最初は name() を設定しておりませんでしたが、通常の開発では最初から name() を決めておくことがほとんどです。

次のアプリであるTwitter風アプリを作成しよう、では最初から name() を付属させておりますので、今回のような全部のページを修正するということはありませんということを、ここで説明させていただきます。

次章:#27 確認画面の作成と問題点 に進む