はじめに
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な設計がスムーズになります。役割とルートの関係性を理解して、効率よく開発していきましょう!
コメント