在Laravel 5中更改存储路径

时间:2015-08-05 19:38:17

标签: php laravel laravel-5.1

我想将Laravel 5.1使用的存储路径更改为/home/test/storage。这样做的好处是这些文件不会存储在存储库中,我认为这相当丑陋。在Laravel 4中,使用bootstrap/paths.php非常简单。

在Laravel 5中,这可以通过在$app->useStoragePath('/path/')中使用bootstrap/app.php来实现。但是,我想使用配置选项定义存储路径,例如$app->useStoragePath(config('app.storage_path')。 config选项调用环境变量或返回默认位置。

这样做会产生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');
});

最后一个选项部分有效;视图缓存现在放在正确的位置,但日志仍在旧位置。

6 个答案:

答案 0 :(得分:6)

这是一个简单的解决方案,可以像在 Laravel 4

中一样更改 Laravel 5 中的存储路径

on 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);

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

答案 1 :(得分:5)

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' ) );

答案 2 :(得分:3)

在.env中设置

app.php

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

应用程序/提供者/ AppServiceProvider.php

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

.ENV

APP_STORAGE=custom_location

答案 3 :(得分:2)

这适用于Laravel 5.2

档案:app/Providers/AppServiceProvider.php

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

答案 4 :(得分:0)

useStoragePath上调用AppServiceProvider不能正常工作,因为在加载配置文件后调用了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*/);
        });
    }

答案 5 :(得分:0)

如果您的网站是托管的;

将所有内容从公用文件夹移动到根文件夹

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