Laravel 验证问题

Laravel validation issue

我在验证程序规则时遇到问题

return [
            'features' => 'required|array',
            'features.*' => 'required|string',
            'link' => 'required|url',
            'image' => 'nullable|file|image|mimes:jpeg,png,gif,webp|max:2048',
        ];

Return 我是一个错误,即使存在字段也是必需的。 我不明白是什么导致了这个问题。我使用相同的验证来存储并且它完美地工作。

这是我的控制器代码

public function update(UpdateSite $request, Site $site)
    {
        $validatedData = $request->validated();



        if ($validatedData['image']) {
            Storage::delete($site->path);

            $imagePath = $validatedData['image']->store('thumbnails');
            $interventedImage = Image::make(Storage::url($imagePath));
            $interventedImage->resize(500, null, function ($constraint) {
                $constraint->aspectRatio();
            });
            $interventedImage->save('storage/'.$imagePath);

            $site->update([
                'path' => $imagePath,
            ]);
        }

        $site->update([
            'site_link' => $validatedData['link'],
        ]);

        $site->features()->delete();

        if ($validatedData['features']) {
            foreach ($validatedData['features'] as $feature) {
                $site->features()->save(new SiteFeature(["feature" => $feature]));
            }
        }

        return $this->response->item($site, new SiteTransformer);
    }

更新#1

我的路线 $api->put('sites/{id}', 'SiteController@update')->where(['id' => '\d+']);

我看到 api 方法是 PUT,但您正在使用 form-data 的 Postman 来请求。尝试使用 x-www-form-urlencoded 请求你 api.

这是关于我的测试。对不起我的英语。

问题出在 PHP 无法与 PUTPATCH 请求中的 multipart/form-data 一起使用。很好奇这个问题现在还存在,因为在2014年左右的互联网话题中就有了。

解决方案

文档中有解决方法https://laravel.com/docs/5.6/routing#form-method-spoofing

因此,要更新记录,我只需要使用方法 post 而不是 put/patch 并发送输入字段 _method = PUT.

我自己试了一下 put 路由被调用了。

如果 features 是一个数组,那么第二行是正确的,但是如果你将 features 作为字符串传递,那么第二行应该被删除,这条规则说验证你有两个参数称为 features 其中一个是字符串并且是必需的其他也是数组并且需要

'features' => 'required|array',
'features.*' => 'required|string',