Laravel: évitez la fonction env() en dehors des fichiers de config

Posté le March 12, 2018

Dans Laravel, le fichier .env permet facilement de renseigner toutes les valeurs dynamiques et personnelles telles que les identifiants de connexion à la base de données ou les clés d'API. Vous pouvez ajouter n'importe quelle clé dans ce fichier pour vos développements.

Par exemple, imaginons que l'on veut utiliser une API externe pour récupérer des chatons dans notre appli, et que nous avons besoin d'une clé pour utiliser cette API. On peut l'ajouter à notre .env:

KITTENS_SECRET_KEY=a1b2c3d4e5

Ensuite, à l'endroit où nous voulons appeler l'API, on peut retrouver cette clé:

// app/Services/Kittens.php

$key = env('KITTENS_SECRET_KEY');

// Fetch the API with curl or Guzzle or whatever you want

Maintenant que nous avons une jolie appli affichant des chatons, que faire pour déployer en production ?

Si vous avez déjà lu la section deploiement de la documentation, vous savez que vous pouvez optimiser votre appli avec quelques commandes `artisan.

L'une d'entre elles, php artisan config:cache, met en cache les valeurs de configuration.

Elle va aussi casser l'appli. Pourquoi ? Car, même si ce n'est pas forcément évident, une fois que la configuration est cachée, le fichier .env ne sera plus chargé et tous les appels à la fonction envretourneront null .

Si on reprend notre exemple:

// app/Services/Kittens.php

$key = env('KITTEN_API_SECRET_KEY'); // This will be null

Pour corriger cela, il suffit d'appeler env uniquement dans les fichiers de config

// config/kittens.php

return [

    'secret_key' => env('KITTENS_SECRET_KEY')
		
];

Ensuite utilisez la fonction config au lieu de env:

// app/Services/Kittens.php

$key = config('kittens.secret_key');

// Fetch the API with curl or Guzzle or whatever you want

Maintenant, notre config peut-être cachée sans casser l'appli 🎉