php - 在初始化配置之前更改存储路径但仍使用 env()
问题描述
设置将运行 Laravel 的 IIS 服务器。需要设置存储路径指向映射到 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
在某个时候再次初始化。所以我想知道这是否是一个好的解决方案?还是有更好的?
感谢您的回复!
解决方案
你可以config/filesystems.php
这样设置:
// ...
'default' => 'network',
// ...
'disks' => [
'network' => [
'driver' => 'local',
'root' => env('APP_STORAGE_PATH', storage_path('app')),
],
//...other disk configs
],
然后你可以设置APP_STORAGE_PATH
你的.env
toZ://path/to/app/storage
或任何你需要的。
如果您需要切换到其他磁盘,您可以执行以下操作:
return Storage::disk('local')->get('a file.pdf');
推荐阅读
- javascript - 添加到主屏幕到图像
- docker - flask docker - equests.exceptions.ConnectionError:HTTPConnectionPool(host ='localhost',port = 8080):url超过最大重试次数:/users
- java - 如何在 Android 工具栏中部分禁用单击主页按钮?
- c++ - C++ 模板避免两次传递元素类型
- c++ - cpp中的类定义但遇到错误:不完整类型的无效使用
- blazor - MatBlazor - 嵌入式资源文件不输出
- xamarin.forms - Xamarin 与 aot 和 mono 形成交互
- php - php多数组分组和最大值每组和每个数组的总和
- intellij-idea - 无法下载所有 Maven 依赖项
- excel - VBA Sumifs MultiSelect Item ListboxList