У меня проблема, когда правила валидатора
return [
'features' => 'required|array',
'features.*' => 'required|string',
'link' => 'required|url',
'image' => 'nullable|file|image|mimes:jpeg,png,gif,webp|max:2048',
];
Верните мне ошибку, что поля обязательны, даже если они есть.
Я не могу понять, в чем проблема. Я использую идентичную проверку для хранения, и она отлично работает.
Вот код моего контроллера
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);
}
Мой маршрут
$api->put('sites/{id}', 'SiteController@update')->where(['id' => '\d+']);
@Hussein только что сделал return var_dump($request->all()), и он кажется пустым. Я не могу понять, где потеряны данные
Вы уверены в названии этого поля features[0]?
@ Хусейн ага. Тем не менее, согласно сообщению об ошибке, link также пуст.
можете ли вы включить полный код для проверки и определения правил?
Убедитесь, что ваши маршруты верны (метод, URL ...). Поскольку я тестирую ваши правила валидатора, все в порядке. @ Sergey
Я показал правила, что это сама проверка. Это расширенный запрос динго FormRequest
показать код формы, предположим, что передан запрос формы, не нужно $ request-> validated (); , просто используйте $ request-> input ('link') ..etc
@ kenken9999 нет необходимости в коде формы, так как у нас есть Почтальон, куда мы отправляем поля и знаем, что они будут отправлены
в запросе формы вы изменили return true в public function authorize()?
@ kenken9999 Да. Если бы я этого не сделал, он отправил бы другую ошибку
Похоже, это проблема PHP, связанная с PUT / PATCH и данными формы






Проблема заключается в PHP, который не может работать с multipart/form-data в запросе PUT, PATCH. Очень любопытно, что эта проблема все еще присутствует, поскольку в Интернете есть темы примерно с 2014 года.
Есть решение в документах https://laravel.com/docs/5.6/routing#form-method-spoofing
Поэтому для обновления записи мне нужно использовать метод post вместо put / patch и отправить поле ввода _method = PUT.
Только что попробовал, был задействован маршрут put.
если функции - это массив, поэтому вторая строка верна, но если вы передаете функции в виде строки, вторая строка должна быть удалена, в этих правилах говорится, что у вас есть два параметра, называемых функциями, один из них является строкой и является обязательным, другой также является массивом и требуется
'features' => 'required|array',
'features.*' => 'required|string',
проверьте с помощью json-запроса, чтобы узнать, проблема с запросом или проверкой