我想将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');
});
最后一个选项部分有效;视图缓存现在放在正确的位置,但日志仍在旧位置。
答案 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__;
});