Lumen подключение Storage из Laravel
Работая над одним из проектов, понадобилось мне подключить к фреймворку Lumen, Storage из Laravel, делается это так..
Добавляем пакет flysystem через композер
1 2 3 |
composer require "league/flysystem: ~1.0" |
Открываем /bootstrap/app.php и добавляем туда
1 2 3 4 5 6 7 8 9 |
$app->withFacades(); $app->configure('filesystems'); if (!class_exists('Storage')) class_alias('Illuminate\Support\Facades\Storage', 'Storage'); $app->register(Illuminate\Filesystem\FilesystemServiceProvider::class); |
далее создаем папку /config/ и качаем туда файл filesystems.php из репозитория laravel
1 2 3 |
wget https://raw.githubusercontent.com/laravel/laravel/master/config/filesystems.php |
На всякий случай, там вот такое содержимое по-умолчанию
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<?php return [ /* |-------------------------------------------------------------------------- | Default Filesystem Disk |-------------------------------------------------------------------------- | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud | based disks are available to your application. Just store away! | */ 'default' => env('FILESYSTEM_DRIVER', 'local'), /* |-------------------------------------------------------------------------- | Default Cloud Filesystem Disk |-------------------------------------------------------------------------- | | Many applications store files both locally and in the cloud. For this | reason, you may specify a default "cloud" driver here. This driver | will be bound as the Cloud disk implementation in the container. | */ 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace" | */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), ], ], ]; |
Далее можем использовать
1 2 3 4 5 |
use Storage; ... Storage::disk('public')->put('test.txt', 'something'); |
Если ваша IDE не имеет поддержки Laravel, тогда вместо use Storage используйте
1 2 3 |
use Illuminate\Support\Facades\Storage; |
Чтобы прокинуть символическую ссылку в public, делаем так
1 2 3 |
ln -s /<полный-путь>/storage/app/public /<полный-путь>/public/storage |
или тоже самое через artisan (в Lumen-е нет по-умолчанию этой команды)
1 2 3 |
php artisan storage:link |
После этого, можно получить ссылку для использования в тегах вот таким образом
1 2 3 4 5 6 7 8 |
use Storage; ... Storage::disk('public')->put('test.txt', 'something'); $link = url(Storage::disk('public')->url('test.txt')); |
Author: | Tags: /
| Rating:
Leave a Reply