设置要运行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
。所以我想知道这是否是一个好的解决方案?还是有更好的一个?
感谢您的回复!
答案 0 :(得分:0)
您可以这样设置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');
答案 1 :(得分:0)
我和@Ishmael一起在评论中提供了答案,并且我使用System Environment Variable
来消除在每个请求上加载.env
文件的需要。
所以我刚刚在bootstrap/app.php
$app->useStoragePath(env('APP_STORAGE_PATH', storage_path()));