トラブル発生
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トークンと同じですね。