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.
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
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' ) );
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
Cela fonctionne sur Laravel 5.2
Fichier: app/Providers/AppServiceProvider.php
fonction publique registre () { ... $ this-> app-> useStoragePath (config ('what_ever_you_wou'want')); ... }
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*/);
});
}