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 !
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.
Et voilà ! C'est terminé !
Dans la prochaine leçon nous allons créer des Entités.
