フォームを作成して送信する
ユーザーが入力するフォームの作り方と、送信された値をコントローラで受け取る流れを、初心者向けにやさしく解説します。
広告枠(記事上)— 本番では AdSense 広告が表示されます
ここまではデータを表示・操作する方法を学びました。次は、ユーザーに入力してもらう仕組み——フォームを作ります。会員登録、お問い合わせ、投稿……Webアプリの多くはフォームから始まります。
フォームの全体の流れ
フォームの処理は、次のように進みます。
① 入力画面を表示(GET) → ② ユーザーが入力して送信(POST) → ③ 受け取って保存
「画面を見せる」のと「送信を受け取る」のは別々の処理になります。順に作っていきましょう。
① 入力画面を表示する
まず、フォームのある画面を返すルートとビューを用意します。
// routes/web.php
use App\Http\Controllers\PostController;
Route::get('/posts/create', [PostController::class, 'create']); // 入力画面
Route::post('/posts', [PostController::class, 'store']); // 送信先
ビュー(resources/views/posts/create.blade.php)にフォームを書きます。
<form action="/posts" method="POST">
@csrf
<div>
<label>タイトル</label>
<input type="text" name="title">
</div>
<div>
<label>本文</label>
<textarea name="body"></textarea>
</div>
<button type="submit">投稿する</button>
</form>
@csrf は必須のおまじない(最初は)
@csrf は、「このフォームは確かにこのサイトから送られた」ことを証明する安全用のトークンを埋め込むものです。これがないと Laravel は送信を受け付けず、エラーになります。フォーム(POST)には必ず @csrf を書くと覚えてください(不正送信=CSRF攻撃を防ぐ仕組みです)。
name="title" の name 属性が、送信された値を受け取るときのキーになります。
② 送信を受け取る(コントローラ)
送信された値は、コントローラのメソッドで $request から受け取ります。
// app/Http/Controllers/PostController.php
use Illuminate\Http\Request;
use App\Models\Post;
public function store(Request $request)
{
// name="title" の値を受け取る
$title = $request->input('title');
$body = $request->input('body');
// そのまま保存もできる
Post::create([
'title' => $request->input('title'),
'body' => $request->input('body'),
]);
// 一覧ページなどへ移動(リダイレクト)
return redirect('/posts');
}
$request->input('title') で、フォームの name="title" に入力された値が取れます。保存が終わったら、redirect() で別のページへ移動させるのが一般的です。
まとめ
- フォーム処理は「入力画面を表示(GET)→ 送信(POST)→ 受け取って保存」の流れ。
- POSTフォームには 必ず
@csrfを書く(不正送信を防ぐ安全装置)。 <input name="title">の name が受け取り時のキーになる。- コントローラでは
$request->input('title')で値を受け取る。保存後はredirect()で移動。 - ただし、このままでは空のまま送信もできてしまいます。次の単元で**バリデーション(入力チェック)**を学びます。
広告枠(記事下)— 本番では AdSense 広告が表示されます