Laravel: работа с файлами – просмотр и удаление файлов
Доброго времени суток. В прошлой статье мы с вами рассмотрели как загружать файлы в Laravel. Но просто загружать файлы не интересно. Хотелось бы научиться просматривать файлы и удалять их методами Laravel. В данной статье мы и разберемся как это делать.
Первое, что нам необходимо сделать – это настроить место хранения наших файлов (storage)
Настройка файловой системы
Все настройки для файловых систем находятся в config/filesystems.php. Откроем этот файл, нас интересует элемент массива «disks». Добавим в него следующий код:
'disks' => [ … 'images' => [ 'driver' => 'local', 'root' => storage_path('images'), ], …
Как вы помните, картинки у нас хранятся в storage/images.
Контроллер для работы с файлами: просмотр и удаление
Контроллер, который отвечает за роботу с файлами называется UploadController (из статьи «Загрузка файлов в Laravel»). Данный контроллер содержит два метода:
- Метод отображения формы для загрузки файлов – getForm
- Метод, который отвечает непосредственно за загрузку файлов – upload
Нам необходимо добавить еще два метода:
- getFiles – метод, который будет получать все файлы, которые хранятся в нашем storage
- delete – метод, который удаляет файл
Открываем наш контроллер app/Http/Controllers/UploadController.php и добавляем эти методы:
… public function getFiles() { $f = Storage::disk('images'); $files = $f->allFiles(); return view('files',['files' => $files]); } public function delete(Request $request) { $f = Storage::disk('images'); $f->delete($request->filename); return redirect('upload/all'); } …
Теперь нам нужно создать вьюшку files.blade.php
Создание view для отображения файлов
В папке resources/views создадим файл files.blade.php и добавим в него следующий код:
<!DOCTYPE html> <html> <head> <title>Upload File</title> </head> <body> <table> @if($files) <thead> <th>Название</th> <th></th> </thead> <tbody> @foreach ($files as $file) <tr> <td>{{ $file }}</td> <td><a href="{{ route('upload_delete',['filename' => $file]) }}">Удалить</a></td> </tr> @endforeach </tbody> @else <tr> <td colspan="2">Файлов нет</td> </tr> @endif </table> </body> </html>
Осталось только добавить роуты.
Создание роутов
Открываем файл routes/web.php и добавляем в него следующий код:
… Route::get('upload/all',['as' => 'upload_all', 'uses' => 'UploadController@getFiles']); Route::get('upload/delete/{filename}',['as' => 'upload_delete','uses' => 'UploadController@delete']); …
Отлично. Проверяем.
Переходим <имя_сайта>/upload/all (в моем случае http://test.loc/upload/all).
И проверим папку где хранятся наши картинки.
Теперь давайте удалим этот файл, заходим <имя_сайта>/upload/all (в моем случае http://test.loc/upload/all) и жмем по ссылке «Удалить» напротив названия файла.
Как видим, файл удален и у нас больше нет файлов.
Давайте проверим папку. Как видите папка пуста
Отлично. Мы с вами разобрали как с помощью Laravel просмотреть файлы в папке и как их удалить.
Не забываем подписаться, чтобы не пропустить выхода новых статей: VK, Facebook, Twitter