Проблема проверки Laravel - PullRequest
       16

Проблема проверки Laravel

0 голосов
/ 02 сентября 2018

У меня проблема при проверке правил

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

Верните мне ошибку, что поля обязательны для заполнения, даже если они присутствуют. enter image description here Я не могу понять, что вызывает проблему. Я использую идентичную проверку для хранения, и она отлично работает.

Вот код моего контроллера

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+']);

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Проблема заключается в PHP, который не может работать с multipart/form-data в PUT, PATCH запросах. Очень любопытно, что эта проблема все еще присутствует, поскольку в Интернете появляются темы примерно с 2014 года.

Soulution

В документах есть решение https://laravel.com/docs/5.6/routing#form-method-spoofing

Таким образом, чтобы обновить запись, все, что мне нужно, это использовать метод post вместо put / patch и отправить поле ввода _method = PUT.

Только что попробовал себя, маршрут put был вызван.

0 голосов
/ 02 сентября 2018

если feature - это массив, поэтому вторая строка верна, но если вы передаете объекты как строковую, нужно удалить строку, две, эти правила говорят, что проверка, что у вас есть два параметра, называемых признаками, один из них является строкой и требуется, а другой также является массивом и требуется

'features' => 'required|array',
'features.*' => 'required|string',
0 голосов
/ 02 сентября 2018

Я вижу, что метод API - PUT, но вы используете Postman по form-data для запроса. Попробуйте использовать x-www-form-urlencoded запросить у вас API.

Это про мой тест. Извините за мой английский.

enter image description here

enter image description here

...