web-dev-qa-db-ja.com

Laravel 5でストレージパスを変更します

ストレージパスを変更したい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');
});

最後のオプションは部分的に機能します。ビューのキャッシュは正しい場所に配置されましたが、ログはまだ古い場所にあります。

13
spacek33z

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

これにより、ストレージパスがセッション、ビュー、キャッシュ、ログと同じになります

7
Oli Soproni B.

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' ) );
6
Vince Lowe

.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
5
M Holod

これはLaravel 5.2で動作します

ファイル:app/Providers/AppServiceProvider.php

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

useStoragePathAppServiceProviderで呼び出すと、設定ファイルがロードされた後に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*/);
        });
    }
1

あなたのウェブサイトがホストされている場合;

すべてをパブリックフォルダからルートフォルダに移動します

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