Help us understand the problem. What is going on with this article?

Laravelのpatch/putでハマった話

More than 1 year has passed since last update.

トラブル発生

laravelで書かれたAPIの動作検証をpostmanで実行していたのですが、
patchメソッドやputメソッドではリクエストの中身が取得できていない問題が発生しました。

調査

dd($request->all());

を実行すると結果はnull

phpUnitからのテストは通っているので
サーバ側のログを追ってみると
実際のリクエストはpostで飛んできていて
_methodsというパラメータにpatchが指定されていました。

解決

postmanのフォームパラーメータのキーに
_methodを追加
値に patchやputを入れてやると上手く動きました。

axiosはpatchメソッド実行時にペイロードがjsonの場合は問題ないのですが、
ペイロードがFormDataの場合はダメという挙動でしたが
同様にformに_merthodパラメータをappendすることで対応できました。

form.append('_method', 'patch')
await axios.post(apiUrl, form)

おまけ

ちなみに、formをbladeで書く場合は

 {{ method_field('PATCH') }}

または

@method('PATCH')

をformタグの内部に書く必要があるそうです。
csrfトークンと同じですね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away