Il y a plus d’un an, nous avions fait un article équivalent pour Symfony 4. Si vous l’avez lu, vous ne serez pas dépaysé, la démarche est quasiment identique !
Aujourd’hui on va voir pas à pas comment établir une connexion vers une base de données PostgreSQL dans Symfony 5 🙂
Versions utilisées pour l’article :
- Symfony 5.2
- Doctrine 2.8
- PostgreSQL 11
Je pars du principe que vous avez déjà installé Doctrine, si ce n’est pas le cas, vous trouverez les instructions d’installation ici.
I. Activer les pilotes PostgreSQL
Pour commencer, il faut activer les pilotes PostgreSQL pour permettre à PHP d’accéder aux bases de données PostgreSQL.
Les pilotes pgsql et pdo_pgsql sont nécessaires.
Si vous utilisez une solution comme WAMP, Laragon, Easy PHP, les pilotes sont simplement désactivés et les fichiers DLL nécessaires sont présents dans le répertoire ‘ext’ de votre dossier php utilisé.
Si vous n’utilisez pas ce type de solution, vous pouvez installer les pilotes manuellement : https://www.php.net/manual/fr/install.pecl.windows.php
Dans tous les cas, il faut dé-commenter les lignes suivantes dans votre fichier de configuration php.ini:
Note : pour localiser votre fichier php.ini utilisé, vous pouvez ouvrir un terminal dans le dossier de votre projet php et taper la commande php –ini.
Pour s’assurer de l’activation de ces pilotes, vous pouvez tapez la commande « php -i« . Si tout s’est bien passé, vous devriez voir apparaître ces lignes dans la sortie :
II. Configurer Symfony
Il y a deux façons de configurer notre connexion vers PostgreSQL.
1. Dans le fichier .env à la racine du projet
La première façon de faire est de spécifier toutes les informations dans la variable DATABASE_URL qui est située dans le fichier .env qui est à la racine de votre projet.
Attention à ne pas mettre des identifiants de production directement dans ce fichier. En effet, les variables spécifiées dans le fichier .env sont affichées dans le phpinfo !
Vous pouvez néanmoins spécifier les informations de connexion qui sont propre à votre environnement local en créant un fichier nommé « .env.local » à la racine de votre projet.
Il y a 3 exemples de configurations commentées par défaut dont une pour PostgreSQL :
DATABASE_URL="postgresql://db_user:[email protected]:5432/db_name?serverVersion=13&charset=utf8"
Il suffit ici de dé-commenter cette ligne en supprimant le ‘#’ en début de ligne et de remplacer les informations d’exemples par les votre.
2. Dans le fichier doctrine.yml
Il faut se rendre dans le fichier doctrine.yml situé à la racine de votre projet dans config/packages.
Supprimez la ligne suivante afin que les informations de connexion ne soient pas récupérées de la variable d’environnement « DATABASE_URL » :
url: '%env(resolve:DATABASE_URL)%'
Ajoutez ensuite les lignes suivantes à ce fichier en modifiant les information de connexion :
dbal:
dbname: le_nom_de_votre_db
host: localhost
port: 5432
user: utilisateur_de_votre_db
password: mot_de_passe_utilisateur
driver: 'pdo_pgsql'
server_version: '11'
charset: utf8
III. Vérification que la connexion est établie
Exécutez la commande suivante via l’invite de commande Windows :
php bin/console doctrine:query:sql "SELECT 1"
Si la connexion avec la base de données est bien établie, vous devriez obtenir le message suivant :
Si vous obtenez cette réponse, c’est que vous êtes bien connecté 🙂
Sources
https://symfony.com/doc/current/reference/configuration/doctrine.html
https://www.doctrine-project.org/projects/doctrine-dbal/en/current/reference/configuration.html