Это нормальное поведение. Когда запрос сделан, Laravel преобразует файлы в запросе в класс UploadedFile. Так как вы получаете доступ к проверенным данным из запроса, это то, что возвращается. Вы напрямую заполняете эти значения как атрибуты, и UploadedFile не конвертируется автоматически в путь, поэтому, вероятно, его не следует включать в первое обновление.
В любом случае, в вашем коде вы фактически включаете в вашем вопросе есть метод dd()
перед вызовом метода uploadImage
, и этот метод сохраняет путь и не пытается сохранить весь класс UploadedFile. Поэтому, если вы сбросите его после того, как оно, вероятно, получит правильное значение, вы можете проверить это?
Я бы сделал это так:
public function update(Request $request, SlideShow $slideshow)
{
// validate first
$data = $request->validate([
'title_en' => 'required',
'title_ar' => 'required',
'link' => 'nullable|url',
'image' => 'image'
]);
// only pull the data that we can update right now
$slideshow->update($request->only(['title_en', 'title_ar','link']));
// handle and store image if needed
$slideshow->uploadImage();
session()->flash('success', __('dashboard.slideshow.edit_success'));
return redirect()->route('admin.slideshow.index');
}
и затем метод на модели:
public function uploadImage($imageName = 'image')
{
if(request()->has($imageName)){
\Storage::delete($this->image);
$uploadedImage = request()->$imageName->store('slideshow/');
\Image::make('storage/'.$uploadedImage)->resize(870, null, function ($constraint) {
$constraint->aspectRatio();
})->save();
$this->update(['image' => $uploadedImage->path()]);
}
}