0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フォームの action とルート指定、基礎的なHTML構造も一緒に学びなおす

Posted at

はじめに

Laravelで開発をしていると、Bladeテンプレート内で以下のようなコードをよく見かけます:

<form action="{{ route('replies.replycompleted', ['id' => $post->id]) }}" method="POST">

「これは何をしているの?」「HTMLの form タグってそもそも何?」と気になったので、LaravelとHTMLの基本をセットで学びなおした内容を備忘録としてまとめてみました。

①HTMLの form タグの基本

まずは、HTMLの form タグについて復習します。

<form action="/送信先URL" method="POST">
    <input type="text" name="example">
    <button type="submit">送信</button>
</form>
  • action 属性:フォームの送信先URL
  • method 属性:HTTPメソッド(GET / POSTなど)
  • :フォームの入力欄(name属性がキーになる)
  • :フォーム送信ボタン

②Laravelでのroute()の使い方

Laravelでは、route() ヘルパーを使って、ルート名からURLを自動生成できます。

例:

action="{{ route('replies.replycompleted', ['id' => $post->id]) }}"

このコードは、routes/web.php に定義されたルートのURLを取得しています。
web.php 側の定義例:

Route::post('/reply/completed/{id}', [ReplyController::class, 'store'])->name('replies.replycompleted');

このようにルート名が 'replies.replycompleted' で、パラメータに id を取るルートに対して、
Blade内で route('replies.replycompleted', ['id' => $post->id]) を使うことで、以下のようなURLが生成されます:

/reply/completed/5

(※ $post->id が5だった場合)

③method=“POST” とCSRF対策

Laravelで method="POST" を使うときは、CSRF(クロスサイトリクエストフォージェリ)対策として、必ず @csrf を入れる必要があります。

<form action="{{ route('replies.replycompleted', ['id' => $post->id]) }}" method="POST">
    @csrf
    <!-- フォーム内容 -->
</form>

これがないと、Laravel側で「419 Page Expired」エラーになります。

④Bladeテンプレートでの変数展開

  • {{ ... }} → 変数や関数の値をHTMLに表示
  • route('ルート名', パラメータ配列) → 指定したルートのURLを生成

⑤まとめ

IMG_3741.jpeg

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?