web-dev-qa-db-fra.com

Changer le chemin de stockage dans Laravel 5

Je veux changer le chemin de stockage Laravel 5.1 utilise quelque chose comme /home/test/storage. Cela a pour avantage que ces fichiers ne sont pas stockés dans le référentiel, ce qui est assez moche à mon avis. Dans Laravel 4, c'était très simple avec bootstrap/paths.php.

Dans Laravel 5 cela fonctionne en utilisant $app->useStoragePath('/path/') dans bootstrap/app.php. Cependant, je souhaite définir le chemin de stockage avec une option de configuration, telle que $app->useStoragePath(config('app.storage_path'). L'option config appelle une variable d'environnement ou renvoie un emplacement par défaut.

Cela se traduit par un Uncaught exception 'ReflectionException' with message 'Class config does not exist'; cela a du sens, car cette fonction n’est pas encore chargée.

J'ai essayé de définir le chemin de stockage juste après le démarrage:

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

Cela n'a rien changé. J'ai aussi essayé de le lier directement à path.storage:

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

La dernière option fonctionne partiellement; le cache de vue est maintenant placé à l'emplacement correct, mais les journaux sont toujours à l'emplacement ancien.

10
spacek33z

Voici une solution simple pour changer le chemin de stockage dans Laravel 5 comme nous le faisons dans Laravel 4

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

le chemin de stockage sera identique à la session, vues, cache, journaux

6
Oli Soproni B.

Laravel 5.3 est dans 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' ) );
4
Vince Lowe

Mettre en place en .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
3
M Holod

Cela fonctionne sur Laravel 5.2

Fichier: app/Providers/AppServiceProvider.php

fonction publique registre () {
 ... 
 $ this-> app-> useStoragePath (config ('what_ever_you_wou'want')); 
 ... 
} 
2
BoogieBug

Appeler useStoragePath sur votre AppServiceProvider ne ferait pas le travail correctement car AppServiceProvider est appelé après le chargement des fichiers de configuration. donc, toute utilisation de storage_path dans les fichiers de configuration ferait toujours référence à l'ancien chemin de stockage.

Afin de résoudre correctement ce problème, je vous suggère d’étendre la classe Application, puis d’écrire les éléments suivants sur le constructeur de votre propre classe.


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