Изменение пути к хранилищу перед инициализацией конфигурации, но все еще с использованием env () - PullRequest
0 голосов
/ 08 января 2019

Настройка сервера IIS, на котором будет работать Laravel. Необходимо указать путь к хранилищу, указывающий на сетевой диск, который сопоставлен с Z:

Поскольку мне нужно, чтобы это можно было настроить, я бы хотел сделать это через файл .env.

Я попытался установить его через AppServiceProvider, используя что-то вроде $app->useStoragePath(config('app.storage_path'));.

Это установило путь к нужному каталогу при использовании dump(storage_path()). Но проблема в том, что конфигурация файловой системы устанавливается до того, как AppServiceProvider изменит каталог. В итоге Storage::disk() использует каталог по умолчанию для хранения.

Затем я попытался поместить $app->useStoragePath(env('APP_STORAGE_PATH', storage_path())); в файл bootstrap/app.php. Очевидно, это не работает, так как функция env() всегда возвращает null здесь. Я понял, что Laravel не инициализировал пакет \Dotenv\Dotenv, поэтому он не читает файл .env.

Чтобы исправить эту проблему, я добавил этот код в bootstrap/app.php -

/**
 * Initializing dotenv here, because we need configurable storage path
 */
$dotEnv = new \Dotenv\Dotenv(__DIR__ . '\\..\\');
$dotEnv->load();
$app->useStoragePath(env('APP_STORAGE_PATH', storage_path()));

Это работает, но я не уверен, что это лучшее решение, так как Laravel, вероятно, снова инициализирует .env в какой-то момент. Так что мне было интересно, если это хорошее решение? Или есть лучший?

Спасибо за ответы!

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Я пошел с @Ishmael, предоставленным ответом в комментариях, и я использую System Environment Variable для устранения необходимости загрузки файла .env при каждом запросе.

Так что я просто ушел с этим в bootstrap/app.php

$app->useStoragePath(env('APP_STORAGE_PATH', storage_path()));
0 голосов
/ 08 января 2019

Вы можете установить свой config/filesystems.php так:

// ...
'default' => 'network',
// ... 
'disks' => [
    'network' => [
        'driver' => 'local',
        'root' => env('APP_STORAGE_PATH', storage_path('app')),
    ],
    //...other disk configs
],

А затем вы можете просто установить APP_STORAGE_PATH в вашем .env на Z://path/to/app/storage или что вам нужно.

Если вам нужно переключиться на другой диск, вы можете сделать:

return Storage::disk('local')->get('a file.pdf');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...