LoginSignup
7
6

【Laravel】ルート定義で使う「get」「post」「put」「putch」「delete」を使い分けるためにすること

Last updated at Posted at 2020-08-05

まずは、ルート定義の「HTTP 動詞」についておさらい。

Laravel では、複数の HTTP 動詞に対応したルートを登録することができます。例えば routes/web.php

routes/web.php
Route::get('/', [SampleController::class, 'index']);
Route::post('/', [SampleController::class, 'post']);
Route::put('/', [SampleController::class, 'put']);
Route::patch('/', [SampleController::class, 'putch']);
Route::delete('/', [SampleController::class, 'delete']);

と、このような感じで、同じ URI でも get , post , put , patch , delete の複数の HTTP 動詞に振り分けてルートを定義することが可能になります。

上記の例では、いずれのルートも / がマッチする URI となっていますが、Route:: の次にくる HTTP 動詞によって、適応されるルートが異なってきます。

GET 動詞が付くルートにアクセスするには

GET 動詞が付くルートにアクセスするには、普通にブラウザから URL を入力すると、GET リクエストでのアクセスとなりますので、GET 動詞の付くルートが適応されます。フォームを使用しなければ、だいたい GET リクエストのアクセスなので想像しやすいと思います。普通に a タグのリンクで遷移するのも GET リクエストです。

POST 動詞が付くルートにアクセスするには

POST 動詞が付くルートにアクセスするには、HTML フォームの method 属性に POST を指定して送信してください。

<form action="/foo/bar" method="POST">
    <input type="text" name="hitokoto">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

上記のようにフォームタグの method 属性の値が POST になっています。これによってPOST動詞が定義されているルートが適応されます。

GET & POST 動詞以外の HTTP 動詞が付くルートにアクセスするには?

HTML フォームは method 属性に、put , patch , delete をサポートしていません。つまり、フォームタグの method 属性の値として put , patch , delete を指定することができません。なので、フォームに _method 隠しフィールドを追加して、疑似的に put , patch , delete のリクエストを表現します。

<form action="/foo/bar" method="POST">
    <input type="text" name="hitokoto">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

ちなみに、上記コードをさらにシンプルにすることもできます。_method フィールドを、@method Blade ディレクティブに置き換えても良いでしょう。

<form action="/foo/bar" method="POST">
    <input type="text" name="hitokoto">
    @method('PUT')
    @csrf
</form>

少しすっきりしたコードになりました(=゚ω゚)ノ

7
6
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
7
6