Fluidifier votre workflow sur Drupal avec phpdotenv

Rédigé par Teddy Vermeulin le 13/02/2024

Dernière mise à jour le 30/03/2024

Découvrez comment phpdotenv optimise votre workflow Drupal, en simplifiant la gestion des variables de configurations.

Tout ce qui est susceptible de changer entre les environnements de déploiement – comme les identifiants de la base de données ou le hash salt – ne devrait pas être stocker dans le code directement. Nous allons explorer dans cet article comment éviter cela.

phpdotenv, la solution à un workflow simplifié

Installation de phpdotenv

En utilisant composer, nous allons ajouter phpdotenv à notre projet :

composer require vlucas/phpdotenv

Initialisation de phodotenv

Pour pouvoir utiliser la fonction getenv() n'importe où dans notre projet, nous devons initialiser phpdotenv. Pour cela, nous allons ajouter à la racine de notre projet Druapl, le fichier load.environment.php :

load.environment.php
<?php /** * This file is included very early. See autoload.files in composer.json and * https://getcomposer.org/doc/04-schema.md#files */ use Dotenv\Dotenv; /** * Load any .env file. See /.env.example. * * Drupal has no official method for loading environment variables and uses * getenv() in some places. */ $dotenv = Dotenv::createUnsafeImmutable(__DIR__); $dotenv->safeLoad();

Pour que le fichier load.environment.php soit chargé, nous allons ensuite ajouter dans notre fichier composer.json les lignes suivantes :

composer.json
"autoload": { "files": [ "load.environment.php" ] },

Création du fichier de variables

À la racine du projet, nous allons ajouter un fichier .env. C'est dans ce fichier que nous stockerons les variables utiles ensuite dans le code.

.env
# Environment ENVIRONMENT=local # Database DATABASE_NAME=name DATABASE_USER=user DATABASE_PASSWORD=password DATABASE_HOST=localhost DATABASE_PORT=3306 # Hash Salt SALT=01Kc0W7iulJ5S_yp-n8x41bUntCFgVt2izA48ULCKi3InYEmhBWJ3U4SW1JCYL1w9L_eYVeXEQ

Il est essentiel, pour des raisons de sécurité, de ne pas partager ces informations. Il faut donc ajouter ces lignes à votre fichier .gitignore :

.gitignore
# Ignore .env files as they are personal /.env /.env* !.env.example

Comme vous l'avez sans doute remarqué, nous avons ajouté une exclusion particulière pour le fichier .env.example. En effet, pour permettre à chaque personne qui participe au projet de rapidement le mettre en place, il est important de lui indiquer quelles variables sont requises, mais sans leur donner les valeurs sensibles d'un environnement particulier. 

.env.example
# Environment ENVIRONMENT= # Database DATABASE_NAME= DATABASE_USER= DATABASE_PASSWORD= DATABASE_HOST= DATABASE_PORT= # Hash Salt SALT=

Utilisation des variables dans le code

Il est maintenant très facile d'utiliser les variables déclarées dans notre fichier .env directement dans le code avec la fonction getenv():

settings.php
<?php /** * Database settings */ $databases['default']['default'] = array ( 'database' => getenv('DATABASE_NAME'), 'username' => getenv('DATABASE_USER'), 'password' => getenv('DATABASE_PASSWORD'), 'prefix' => '', 'host' => getenv('DATABASE_HOST'), 'port' => getenv('DATABASE_PORT'), 'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql', 'driver' => 'mysql', 'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/', 'init_commands' => [ 'isolation_level' => 'SET SESSION tx_isolation=\'READ-COMMITTED\'', ], ); /** * Salt for one-time login links, cancel links, form tokens, etc. */ $settings['hash_salt'] = getenv('SALT');

En résumé

La séparation claire entre le code et la configuration, en particulier pour les éléments susceptibles de varier d'un environnement à l'autre, est cruciale pour la sécurité et la flexibilité de votre projet. L'intégration de phpdotenv dans votre workflow Drupal représente une solution élégante et efficace pour gérer ces configurations. 

En suivant les étapes décrites pour installer et utiliser phpdotenv, vous avez désormais les outils nécessaires pour sécuriser vos identifiants sensibles et adapter facilement votre projet aux différents environnements de déploiement. 

Adopter cette pratique n'est pas seulement une question de sécurité ; c'est aussi un pas vers un développement plus organisé et maintenable.