L

フォームを作成して送信する

ユーザーが入力するフォームの作り方と、送信された値をコントローラで受け取る流れを、初心者向けにやさしく解説します。

広告枠(記事上)— 本番では 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 広告が表示されます