はじめに
LaravelでControllerを書くとき、よく出てくる「index」「show」「store」「create」。なんとなく使ってるけど、それぞれの意味や使い分けをちゃんと理解してる?この記事ではその違いと役割をわかりやすく解説していきます。
やりたいこと
-
Laravelの基本的なControllerメソッドを理解する
-
各メソッドのHTTPとの対応を知る
-
よくある使い方をコード付きで確認する
準備するもの
ディレクトリ構成(簡略)
app/Http/Controllers/PostController.php routes/web.php resources/views/post/
コードスクリプト
PostController.php(抜粋)
class PostController extends Controller
{
public function index() {
$posts = Post::all();
return view('post.index', compact('posts'));
}
public function show($id) {
$post = Post::findOrFail($id);
return view('post.show', compact('post'));
}
public function create() {
return view('post.create');
}
public function store(Request $request) {
$validated = $request->validate([
'title' => 'required|max:255',
'body' => 'required',
]);
Post::create($validated);
return redirect()->route('posts.index');
}
}
ルーティング設定
route/web.php
Route::resource('posts', PostController::class);
実行結果と使い分け
| メソッド | 役割 | HTTP | ルート例 |
|---|---|---|---|
| index | 一覧表示 | GET | /posts |
| show | 詳細表示 | GET | /posts/1 |
| create | 新規作成フォーム | GET | /posts/create |
| store | 保存処理 | POST | /posts |
-
index:全件表示 -
show:1件の詳細表示 -
create:入力フォームを表示 -
store:フォームから送られたデータを保存
createとstoreの違いを丁寧に!
🔹create:入力フォームを表示するだけ
ブラウザで /posts/create にアクセスしたとき、空のフォーム画面が表示されます。
この時点ではまだDBには何も保存されません。
🔹store:フォーム送信後のデータ保存処理
ユーザーがフォームに入力して「送信」ボタンを押すと、POSTリクエストが /posts に送られます。
そのリクエストを受け取って、データベースに保存するのが store の役割です。
実行ルートとHTTPメソッド
| メソッド | 目的 | HTTP | ルート例 |
|---|---|---|---|
| index | 投稿の一覧 | GET | /posts |
| show | 投稿の詳細表示 | GET | /posts/1 |
| create | 入力フォーム表示 | GET | /posts/create |
| store | データ保存処理 | POST | /posts |
注意点
-
storeには必ずバリデーションを入れる -
showは存在しないIDで落ちないようfindOrFailを使うのが定番 -
Route::resourceを使えばこれらのメソッドが自動的にルートに割り当てられる
まとめ
LaravelのControllerでは、index・show・create・store を適切に使い分けることで、RESTfulな設計がスムーズになります。役割とルートの関係性を理解して、効率よく開発していきましょう!



コメント