#php #laravel
#php #laravel
Вопрос:
Мой код работает во store()
время, но как только я пытаюсь обновить сохраненный образ, он ничего не делает. Когда я проверял с помощью dd()
, файл вообще не загружался.
public function update(Request $request, $id)
{
$request->validate([
'title' => 'required',
'type' => 'required',
'city' => 'required',
'district' => 'required',
'comment' => 'required',
'full_comment' => 'required',
'photo' => 'sometimes|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
]);
$game = Game::find($id);
$game->title = $request->get('title');
$game->type = $request->get('type');
$game->city = $request->get('city');
$game->district = $request->get('district');
$game->comment = $request->get('comment');
$game->full_comment = $request->get('full_comment');
if ($request->has('photo')) {
$game->photo = $request->get('photo');
$photoName = $game->id.'photo'.time().'.'.request()->photo->getClientOriginalExtension();
$game->photo = $photoName;
$request->photo->storeAs('game-photos', $photoName);
}
$game->save();
return redirect('/games')->with('success', 'Game has been updated');
}
Комментарии:
1. Пожалуйста, постарайтесь более четко изложить свою проблему, например, представив методы whole
store
иupdate
. Прямо сейчас, например, у вас есть$game
переменная, которая берется из ниоткуда.2. @FrancinaldoAlmeida извините, я обновил код
3. Попробуйте использовать
hasFile('photo')
вместоhas('photo')
, и проверьте, верно ли это условие, чтобы мы могли продолжить отладку кода.4. @FrancinaldoAlmeida Я пытался, но фото все еще не загружается, я даже пытался удалить оператор if, затем я получаю сообщение об ошибке «Вызов функции-члена getClientOriginalExtension() при null». Обновление игры работает с инструкцией if, но фотография не обновляется
5. Можете ли вы проверить, что ваши формы имеют правильный
enctype="multipart/form-data"
набор?
Ответ №1:
Предоставленный метод контроллера, хотя и не является оптимальным, должен работать правильно (и работает в моем случае). Пожалуйста, сравните вашу форму со следующим фрагментом:
<form method="post" action="{{ route('game.update', $game) }}" enctype="multipart/form-data">
{!! csrf_field() !!}
{!! method_field('PUT') !!}
<input type="file" name="photo">
<input type="submit">
</form>
Кроме того, вставьте это в самый верх вашего update
метода. Он покажет все отправленные файлы или пустой массив, если таковых нет.
dd($request->files);