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

У меня проблема, когда правила валидатора

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

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

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

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

проверьте с помощью json-запроса, чтобы узнать, проблема с запросом или проверкой

Hussein 02.09.2018 11:04

@Hussein только что сделал return var_dump($request->all()), и он кажется пустым. Я не могу понять, где потеряны данные

Sergey 02.09.2018 11:09

Вы уверены в названии этого поля features[0]?

Hussein 02.09.2018 11:12

@ Хусейн ага. Тем не менее, согласно сообщению об ошибке, link также пуст.

Sergey 02.09.2018 11:13

можете ли вы включить полный код для проверки и определения правил?

Hussein 02.09.2018 11:14

Убедитесь, что ваши маршруты верны (метод, URL ...). Поскольку я тестирую ваши правила валидатора, все в порядке. @ Sergey

Zane 02.09.2018 11:15

Я показал правила, что это сама проверка. Это расширенный запрос динго FormRequest

Sergey 02.09.2018 11:16

показать код формы, предположим, что передан запрос формы, не нужно $ request-> validated (); , просто используйте $ request-> input ('link') ..etc

kenken9999 02.09.2018 11:16

@ kenken9999 нет необходимости в коде формы, так как у нас есть Почтальон, куда мы отправляем поля и знаем, что они будут отправлены

Sergey 02.09.2018 11:16

в запросе формы вы изменили return true в public function authorize()?

kenken9999 02.09.2018 11:17

@ kenken9999 Да. Если бы я этого не сделал, он отправил бы другую ошибку

Sergey 02.09.2018 11:17

Похоже, это проблема PHP, связанная с PUT / PATCH и данными формы

Sergey 02.09.2018 11:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
12
319
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

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

Soulution

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

Поэтому для обновления записи мне нужно использовать метод post вместо put / patch и отправить поле ввода _method = PUT.

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

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

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

Другие вопросы по теме