Файловое хранилище
Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря php-пакету Flysystem от Франка де Жонге. Настройки файловой системы находятся в файле config/filesystems.php. В нём можно настроить так называемые диски. Каждый диск представляет собой определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера.
config/filesystems.phpreturn [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
Функция storage_path() возвращает полный путь к директории storage. Также можно использовать функцию storage_path() для получения полного пути к указанному файлу относительно директории хранилища:
// вернет полный путь /var/www/server.com/storage
$path = storage_path();
// вернет /var/www/server.com/storage/app/file.txt
$path = storage_path('app/file.txt');
Функция public_path() возвращает полный путь к директории public, которая является корнем веб-сервера и доступна из веб. Также можно использовать функцию public_path() для получения полного пути к указанному файлу или директории:
// вернет полный путь /var/www/server.com/public
$path = public_path();
// вернет /var/www/server.com/public/index.php
$path = public_path('index.php');
Сразу после установки Laravel доступны диски local и public, использующие драйвер local.
- Для диска
localместо хранения — директорияstorage/app - Для диска
publicместо хранения — директорияstorage/app/public
Диск local является диском по умолчанию.
Чтобы сделать файлы диска public доступными через веб, надо создать символьную ссылку из public/storage на storage/app/public. Директория public проекта Laravel — является корневой директорией сервера, поэтому файл storage/app/public/image.jpg будет доступен через веб как http://название_сайта.ru/storage/image.jpg.
php artisan storage:link
Какие символьные ссылки создавать, задается в файле конфигурации config/filesystems.php в разделе links:
config/filesystems.phpreturn [
'default' => env('FILESYSTEM_DRIVER', 'local'),
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
],
'links' => [
public_path('storage') => storage_path('app/public'),
],
];
Когда файл сохранён на диске и создана символьная ссылка, можно создать URL к файлу с помощью хелпера asset() или метода url() фасада Storage.
<img src="{{ asset('storage/images/image.jpg') }}" alt="" />
<img src="{{ Storage::disk('public')->('images/image.jpg') }}" alt="" />