如何将带有惯性的参数传递给 Laravel 控制器?

How to pass parameters with Inertia to Laravel controller?

我正在做一个小规模的项目,我们称它为 playground 以供测试。

我有一些数据:

  data() {
    return {
      form: this.$inertia.form({
        id: "",
        name: "",
        email: "",
        files: "",
      }),
     };
    }

表单通过提交时的函数调用处理请求:

      this.form
        .transform((data) => ({
          ...data,
          name: this.sample.name,
          email: this.sample.email,
          files: this.sample.files,
        }))
        .patch(
          this.route("cms.products.sample.update", {
            sample: this.sample,
          }),
          {
            forceFormData: true,
            onSuccess: () => {
              this.form.reset();
            },
          }
        );

传递的示例对象是指需要更新的对象。他被正确传递,Laravel's dd($sample);正确阅读。

问题出在传递的表单数据上。数据不传递给 $request->all(),即传递给请求的属性。相反,它被传递到内容部分,并以一种非常奇怪的方式被解析,就像这样:

#content: """
    ------WebKitFormBoundaryvh1XjftW9MtXqoUC
    Content-Disposition: form-data; name="id"
    
    
    ------WebKitFormBoundaryvh1XjftW9MtXqoUC
    Content-Disposition: form-data; name="name"
    
    Sample Name
    

在不传递自定义样本数据的情况下,表单数据被正确传递给 $request->all(),但随后发生错误,要求在更新时传递模型

Laravels 控制器看起来像这样:

    public function update(UpdateSampleRequest $request, Sample $sample)
    {
        dd($request, $sample);
    }

路线注册于web.php:

 PUT|PATCH admin/products/sample/{sample}.......... cms.products.sample.update › SampleController@update

如果您没有修改路由键或键名

您可以将 this.route( 更改为 route( 并像 this.sample.id...

一样传递 id
...
route("cms.products.sample.update", {
   sample: this.sample.id,
}),
...

答案是 Laravel 不处理 PUT 文件请求。更改为 POST 并添加自定义路由处理程序后,一切正常。