Hostinger

Créer et configurer votre première base de données Symfony

Créer un nouveau projet Symfony 8

Avant de créer une base de données, nous allons commencer par le commencement et créer un nouveau projet Symfony en utilisant la version 8. Bien qu’une nouvelle version puisse être sortie entre-temps, je vous recommande vivement d’utiliser la version spécifique que j’utilise dans cette leçon.

symfony new projet_avec_bdd --version="8.0.*" --webapp

Le projet "mon_projet" précédent n’étant plus nécessaire, vous pouvez le supprimer.

Créer un serveur de base de données MariaDB

Préparer le serveur de base de données avec Docker

Avant de créer une base de données, il faut créer un serveur de base de données, que vous pourrez déployer directement en local (sur votre ordinateur) pour plus de simplicité.

Il existe plusieurs méthodes, mais la plus simple, à mon avis, est d’utiliser Docker. Assurez-vous de l’avoir installé sur votre machine locale. Si ce n’est pas le cas, je vous recommande de le télécharger depuis le site Docker.

Ensuite, dans l'arborescence de votre projet, supprimer le contenu du fichier compose.yaml.

projet_avec_bdd/
|-- ...
|-- compose.yaml
|-- ...

Remplacez le contenu actuel par celui ci-dessous.

services:

  database:
    image: mariadb:12.2
    container_name: symfony_db
    restart: always
    environment:
      MARIADB_ROOT_PASSWORD: root # Change this to a secure password in production
      MARIADB_DATABASE: symfony_db
      MARIADB_USER: symfony_user # Change this to your desired database user
      MARIADB_PASSWORD: password123 # Change this to a secure password in production
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: symfony_pma
    restart: always
    depends_on:
      - database
    environment:
      PMA_HOST: database
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: root
    ports:
      - "8080:80"

volumes:
  db_data:

Pour ce cours, vous pouvez utiliser les mots de passe suggérés, mais veillez à ne pas les utiliser en mode production.

Lancer le serveur de base de données

Docker et le fichier compose.yaml permettent désormais de lancer le serveur dans un terminal dédié, après vous être placé dans le dossier du projet.

Utilisez la commande suivante dans le terminal.

docker-compose up

Cette commande lance le serveur de base de données ainsi qu’un autre service permettant de surveiller le serveur et ses différentes bases de données. Cet outil s’avérera très utile.

On peut déjà vérifier l'interface. On expliquera plus tard le fonctionnement.

Pour cela, selon la configuration du compose.yaml, il faudra taper dans un navigateur web : localhost:8080 !

PhpMyAdmin interface

Super ! Notre serveur de base de données est prêt et notre base de données symfony_db a été créée, nous pouvons maintenant interagir avec Symfony. 👍

Configurer la connexion

Pour indiquer à Symfony l’emplacement et les paramètres de connexion de la base de données, nous utilisons le fichier .env, comme nous l’avons vu dans une autre leçon.

.env

Dans votre éditeur de code, ouvrez le fichier .env. Vous y trouverez une ligne qui commence par DATABASE_URL. C'est cette ligne (36) que nous devons modifier.

# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
#  * .env                contains default values for the environment variables needed by the app
#  * .env.local          uncommitted file with local overrides
#  * .env.$APP_ENV       committed environment-specific defaults
#  * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
# https://symfony.com/doc/current/configuration/secrets.html
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration

###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=
APP_SHARE_DIR=var/share
###< symfony/framework-bundle ###

###> symfony/routing ###
# Configure how to generate URLs in non-HTTP contexts, such as CLI commands.
# See https://symfony.com/doc/current/routing.html#generating-urls-in-commands
DEFAULT_URI=http://localhost
###< symfony/routing ###

###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
#
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/data_%kernel.environment%.db"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8.0.32&charset=utf8mb4"
# DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4"
DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=16&charset=utf8"
###< doctrine/doctrine-bundle ###

###> symfony/messenger ###
# Choose one of the transports below
# MESSENGER_TRANSPORT_DSN=amqp://guest:guest@localhost:5672/%2f/messages
# MESSENGER_TRANSPORT_DSN=redis://localhost:6379/messages
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
###< symfony/messenger ###

###> symfony/mailer ###
MAILER_DSN=null://null
###< symfony/mailer ###

Configurer la connexion

Pour bien configurer, suivez le schéma suivant :

  • [Pilote] : Le moteur de base de données (ex: mysql).
  • [Utilisateur] : Votre nom d'utilisateur de base de données (ex: root).
  • [Mot de passe] : Votre mot de passe de base de données (ex: pass).
  • [Hôte] : L'adresse du serveur (ex: 127.0.0.1 pour le local).
  • [Port] : Le port de connexion (ex: 3306 pour MySQL).
  • [Nom de la BD] : Le nom que vous souhaitez donner à votre base de données (ex: mon_projet_bd). Vous choisissez ce nom ici.

Nous allons le modifier de cette façon selon notre serveur de base de données.

DATABASE_URL="mysql://symfony_user:password123@127.0.0.1:3306/symfony_db?serverVersion=mariadb-12.2.0&charset=utf8mb4"

Pourquoi `mysql://...` ? MariaDB est basée sur MySQL, les deux logiciels utilisent exactement le même "tuyau" pour communiquer : le protocole MySQL.

Configurer de DATABASE_URL

Et voilà ! C'est terminé !

Dans la prochaine leçon nous allons créer des Entités.