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?

Laravel + Inertia + precognition ファイルデータを含んだリクエストをPUTやPATCHで送ると、Laravel側でデータが取得できない問題を解決

Last updated at Posted at 2024-10-02

どんな現象か

laravel-precognition-vue-inertiauseFormを使って、ファイルデータを含めたリクエストをputやpatchメソッドで送ると、Laravel側でリクエストデータが取得できません。

コードは下記のような感じです。(この記事では、フロントエンドをVue.jsで書いています)

<script setup>
import { useForm } from 'laravel-precognition-vue-inertia'
const id = 1
const form = useForm(
    'put', // putメソッドを設定
    `/users/${id}`,
    {
        name: '',
        thumbnailFile: null // ファイルを格納する
    }
)

const submit = () => {
    form.submit({
        preserveScroll: true,
    })
}
</script>

<template>
    <form @submit.prevent="submit">
        <label>Name</label>
        <input v-model="form.name" />
        <label>File</label>
        <input @input="form.thumbnailFile = $event.target.files[0]" type="file" />
        <button :disabled="form.processing">更新</button>
    </form>
</template>

LaravelのWeb.phpでデバックすると、うまく取得できていないことが確認できます。

Route::put('/users/{id}', function(Request $request) {
  dd($request->all(), $request->file('thumbnailFile'));
});

名称未設定1.png

解決方法

useFormのメソッドをpostに設定して、リクエストに_method: 'PUT'を含めるだけでリクエストデータが取得できるようになります。

<script setup>
import { useForm } from 'laravel-precognition-vue-inertia'
const id = 1
const form = useForm(
    'post', // postに変更
    `/users/${id}`,
    {
        _method: 'PUT', // リクエストデータに含める
        name: '',
        thumbnailFile: null
    }
)

const submit = () => {
    form.submit({
        preserveScroll: true,
    })
}
</script>

<template>
    <form @submit.prevent="submit">
        <label>Name</label>
        <input v-model="form.name" />
        <label>File</label>
        <input @input="form.thumbnailFile = $event.target.files[0]" type="file" />
        <button :disabled="form.processing">更新</button>
    </form>
</template>

リクエストデータが取得できます。
名称未設定2.png

原因

PUTやPATCHを使ってファイルアップロードすることを、Laravelがサポートしていないため発生するようです。

気になる方は以下のページを確認してみてください。

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?