ストレージパスを変更したいLaravel 5.1は/home/test/storage
のようなものに使用します。これには、これらのファイルがリポジトリに保存されないという利点があります。これはかなり醜いと思います。In Laravel 4これはbootstrap/paths.php
で非常に簡単でした。
Laravel 5では、これはbootstrap/app.php
の$app->useStoragePath('/path/')
を使用して機能します。ただし、$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');
});
最後のオプションは部分的に機能します。ビューのキャッシュは正しい場所に配置されましたが、ログはまだ古い場所にあります。
Laravel 5の場合と同様に、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);
これにより、ストレージパスがセッション、ビュー、キャッシュ、ログと同じになります
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' ) );
.envで設定します
app.php
'app_storage' => env('APP_STORAGE', storage_path()),
app/Providers/AppServiceProvider.php
public function register()
{
$this->app->useStoragePath(config('app.app_storage'));
}
.env
APP_STORAGE=custom_location
これはLaravel 5.2で動作します
ファイル:app/Providers/AppServiceProvider.php
public function register(){ ... $ this-> app-> useStoragePath(config( 'what_ever_you_want')); ... }
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*/);
});
}
あなたのウェブサイトがホストされている場合;
すべてをパブリックフォルダからルートフォルダに移動します
$app->bind('path.public', function() {
return __DIR__;
});