php 更改Laravel 5中的存储路径

2j4z5cfb  于 2023-01-24  发布在  PHP
关注(0)|答案(8)|浏览(139)

我想更改Laravel 5.1存储路径:类似/home/test/storage的东西。这样做的好处是这些文件不存储在存储库中,我认为这相当难看。
在Laravel 4中,这对于bootstrap/paths.php来说非常简单。
在Laravel 5中,它通过在bootstrap/app.php中使用$app->useStoragePath('/path/')来工作。但是,我想用配置选项来定义存储路径,如$app->useStoragePath(config('app.storage_path')。配置选项调用环境变量或返回默认位置。
这样做的结果是Uncaught exception 'ReflectionException' with message 'Class config does not exist';这是有意义的,因为这个函数还没有加载。
我尝试在启动后设置存储路径:

$app->booted(function () use ($app) {
    $app->useStoragePath(config('app.storage_root'));
});

这没有改变什么。我还尝试了直接绑定到path.storage

$app->bind('path.storage', function ($app) {
    return config('app.storage_root');
});

最后一种选择部分有效;现在,视图高速缓存被放置在正确的位置,但是日志仍然在旧位置。

zazmityj

zazmityj1#

在.env中设置
app.php

'app_storage' => env('APP_STORAGE', storage_path()),

app/Providers/AppServiceProvider.php

public function register()
{
    $this->app->useStoragePath(config('app.app_storage'));
}

.环境

APP_STORAGE=custom_location
gajydyqb

gajydyqb2#

Laravel 5.3位于** Bootstrap /app.php**中

/*
|--------------------------------------------------------------------------
| Set Storage Path
|--------------------------------------------------------------------------
|
| This script allows us to override the default storage location used by
| the  application.  You may set the APP_STORAGE environment variable
| in your .env file,  if not set the default location will be used
|
*/

$app->useStoragePath( env( 'APP_STORAGE', base_path() . '/storage' ) );
mo49yndu

mo49yndu3#

下面是一个简单的解决方案,可以像在Laravel 4中一样更改Laravel 5中的存储路径
在 Bootstrap /app. php上

# new storage path
# base_path() -> returns root path
$path_storage = base_path() . "../../storage";

# override already $app->storagePath using the function
$app->useStoragePath($path_storage);

这将使存储路径与会话、视图、缓存、日志相同

k3bvogb1

k3bvogb14#

这适用于Laravel 5.2
文件:app/Providers/AppServiceProvider.php

public function register() {
  ...
  $this->app->useStoragePath(config('what_ever_you_want'));
  ...
}
sdnqo3pr

sdnqo3pr5#

在您的AppServiceProvider上调用useStoragePath将无法正确执行此工作,因为AppServiceProvider是在加载配置文件后调用的。因此,在配置文件中使用storage_path仍将引用旧的存储路径。
为了正确地解决这个问题,我建议您扩展Application类,然后在您自己的类的构造函数上编写以下内容。

/**
     * MyApplication constructor.
     */
    public function __construct($basePath = null)
    {
        parent::__construct($basePath);
        // set the storage path
        $this->afterLoadingEnvironment(function () {
            $this->useStoragePath(/*path to your storage directory*/);
        });
    }
eqoofvh9

eqoofvh96#

如果您的网站是托管的;
将所有内容从公用文件夹移动到根文件夹

$app->bind('path.public', function() {
    return __DIR__;
});
izj3ouym

izj3ouym7#

在你的bootstrap/app.php中添加这段代码:

$app->useStoragePath(__DIR__ . '/../custom-path/');

config/filesystem.php中:

'local' => [
        'driver' => 'local',
        'root' => storage_path('everything'), //custom-path/everything
    ],

    'public' => [
        'driver' => 'local',
        'root' => storage_path(''),
        'url' => env('APP_URL'),
        'visibility' => 'public',
    ],

然后运行php artisan config:cache

xpszyzbs

xpszyzbs8#

这在Laravel 5.8上有效,因为您必须在尝试使用环境变量之前加载它们。
文件: Bootstrap /app. php

$app->afterLoadingEnvironment(function() use ($app) {
    $app->useStoragePath(env('APP_STORAGE', storage_path()));
});

相关问题