Хочу написать ну очень простенький загрузчик файлов типа: ms office, pdf, картинок и архивов. Столкнулся с проблемой, когда я пытаюсь обновить(метод update) уже зауженный файл (по сути новый должен заменить старый) старый не удаляется, а остаётся там же в папке и дополнительно загружается новый файл. А вот при удалении записи у меня всё срабатывает на ура. Удаляется как сама запись та к и последний загруженный файл. Можете подсказать где косяк? Что я не так делаю? Контроллер PHP: class UploadsController extends AdminController { public function __construct() { $this->template = 'admin.index'; } public function index(){ $uploads = Upload::all(); $this->content = view('admin.upload.index',compact('uploads'))->render(); return $this->renderOutput(); } public function create() { $this->content = view('admin.upload.create')->render(); return $this->renderOutput(); } public function store(Request $request) { $this->validate($request, [ 'title' => 'required', 'file_name' => 'required|file|mimes:jpeg,png,jpg,gif,svg,doc,docx,pdf|max:2048', ]); $upload = new Upload(); $upload->add($request->all()); $upload->addFile($request->file('file_name')); return redirect()->route('uploads.index'); } public function edit($id) { $file = Upload::find($id); $this->content = view('admin.upload.edit',compact('file'))->render(); return $this->renderOutput(); } public function update(Request $request, $id) { $this->validate($request, [ 'title' => 'required', 'file_name' => 'required|file|mimes:jpeg,png,jpg,gif,svg,doc,docx,pdf|max:2048', ]); $upload = Upload::find($id); $upload->add($request->all()); $upload->addFile($request->file('file_name')); return redirect()->route('uploads.index'); } public function destroy($id) { Upload::find($id)->remove(); return redirect()->route('uploads.index'); } } Методы модели которые отвечают за добавление файла, удаление и редактирование Код (Text): protected $fillable = ['title', 'description', 'file_name']; public function add($fields) { $this->fill($fields); $this->save(); } public function addFile($file) { $this->removeFile(); $filename = str_random(10) . '.' . $file->getClientOriginalExtension(); $file->storeAs('/uploads/files', $filename); $this->file_name = $filename; $this->save(); } public function removeFile() { if($this->file_name != null) { Storage::delete('uploads/files/' . $this->file_name); } } public function remove() { $this->removeFile(); $this->delete(); }
Работает. Спасибо. Почему-то я отверг этот способ. Сам не знаю почему. Изначально вообще не стал его пробовать. В принципе вопрос решен. Тему можно закрывать.