Je dois charger un fichier .env différent, nommé .env.test sous certaines conditions.

J'ai essayé de le faire via un middleware en ajoutant

app()->loadEnvironmentFrom('.env.test');
Dotenv::create(base_path(), '.env.test')->overload();

À la bootstrap() méthode de Kernel.php . J'ai également essayé de créer un middleware dédié pour cela et de le charger en tant que premier dans le groupe middleware web . Mais de toute façon, il charge le fichier .env standard.

Cela fonctionne si je le fais dans le fichier /bootstrap/app.php mais je ne veux vraiment pas le mettre là.

3
TheNiceGuy 2 oct. 2020 à 19:15

2 réponses

Meilleure réponse

Je viens de le comprendre: le fichier .env par défaut est en cours de chargement dans la méthode bootstrap() de LoadEnvironmentVariables.php .

Pour utiliser le fichier .env.test, j'ai dû restructurer ma méthode bootstrap() initiale à l'intérieur du fichier App / Http / Kernel.php pour ressembler à ceci:

public function bootstrap() 
{
    app()->loadEnvironmentFrom('.env.test');
    parent::bootstrap(); 
}

L'essentiel était donc de déplacer l'appel parent::bootstrap() sous l'appel loadEnvironmentFrom().

2
TheNiceGuy 2 oct. 2020 à 21:56

Au lieu de modifier le code, vous pouvez utiliser la commande d'exportation créer un fichier appelé .env.test, vous voulez poursuivre cela en tant que fichier .env utiliser le terminal

  1. APP_ENV=local

  2. php artisan config:cache

  3. php artisan key:generate

Cette modification ci-dessous explique comment le fichier .env est défini Dans la classe Illuminate\Foundation\Application, la méthode loadEnvironmentFrom prend le fichier comme paramètre et le définit,

Vous pouvez utiliser bootstrap/app.php après avoir obtenu $app

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
 );

Ici, vous aurez une instance d'Illuminate \ Foundation \ Application

Vous pouvez simplement appeler la fonction loadEnvironmentFrom comme

$app->loadEnvironmentFrom('.env.local');

Peut-être vaut-il mieux utiliser Kernel.php au lieu de cela, je ne pense pas que bootstrap / app.php ou kernel.php sera remplacé par composer update, alors faites plus de calculs en l'utilisant. J'ai ajouté ceci pour que cela vous aide à comprendre les choses.

0
Prafulla Kumar Sahu 3 oct. 2020 à 21:21