configurer la base de donnees pour doctrine et synfony

Afin de tirer le maximum de votre API REST, il est essentiel de mettre en place une base de données. Grâce à l’ORM Doctrine, il est possible de créer des entités. Par la suite, le schéma de base de données pourra être créé en fonction de ces entités. Peu importe le système de gestion de base de données utilisé (MySQL, PostGreSQL, MongoDB, SQLite), Doctrine pourra créer le schéma approprié.

Cet article explique comment configurer une base de données pour le cadriciel Symfony 3.

Deux méthodes différentes sont présentées :

  1. Configurer la base de données à partir des fichiers parameters.yml et config.yml
  2. Configurer la base de données avec des variables d’environnement, un fichier parameters.php et config.yml.

Installer MySQL

Si ce n’est pas déjà fait, installer MySQL ou un LAMP.

Méthode #1 – yml

Configurer la base de données pour Symfony

Afin de pouvoir communiquer avec la base de données, Symfony nécessite d’être configuré. Cette configuration se retrouve dans le fichier config.yml et parameters.yml.

  • parameters.yml : vous permet de spécifier des variables pour votre application.
  • config.yml : vous permet d’utiliser ces variables pour configurer vos bundles Symfony.

parameters.yml

Voici donc les informations de base nécessaires afin de configurer la base de données :

config.yml

Les paramètres définis préalablement (parameters.yml)  sont maintenant utilisés dans le fichier de configuration. Notez que database_host revient database.host.

Méthode #2 – php

Une note sur parameters.php

Il est possible d’utiliser le fichier parameters.yml, par contre, il est impossible d’exécuter des commandes PHP dans un fichier YAML.

Dans le très bon article 12 factor app, il est recommandé de ne pas inscrire de mot de passe dans vos fichiers de projet. Cela amène 2 avantages importants :

  1. Conserve votre mot de passe privé.
  2. Permet de déployer votre application vers plusieurs environnements sans avoir à modifier le code.

Le truc : les variables d’environnement

Il faut éviter de déposer vos mots de passe dans votre code. Où les mettre alors? La réponse est de déposer vos mots de passe et vos configurations dans des variables d’environnement et de les récupérer avec la commande PHP getenv().

Ajouter des variables d’environnement sur Ubuntu

Vos variables d’environnement pour Ubuntu peuvent être définies dans votre fichier .bashrc.

Ajouter les commandes suivantes dans votre fichier .bashrc :

Note

Afin que ces variables d’environnement soient chargées, vous devez relancer la console.

Assurez-vous que les variables sont bien chargées avec la commande env sur GNU-Linux ou set sur Windows.

 Variables d’environnement sur GNU-Linux ou MacOs

 Variables d’environnement sur Windows

Consommer les variables d’environnement

Une fois vos variables ajoutées à votre fichier de configuration .bashrc, il sera possible de les consommer dans votre fichier parameters.php nouvellement créé de la manière suivante :

parameters.php

Importer le fichier parameters.php

La dernière étape, pour utiliser le fichier parameters.php, est de modifier le fichier config.yml afin de charger cette nouvelle ressource :

Créer une nouvelle base de données

La section suivante présente 3 façons de créer une nouvelle base de données pour votre projet Symfony. La première, avec la console Symfony, est celle recommandée.

1) Avec la console Symfony

La console Symfony est, selon moi, la façon la plus efficace afin de créer la nouvelle base de données.

2) En ligne de commande

L’option ligne de commande MySQL est aussi possible, par contre, si vous utilisez SQLite ou PostGreSQL, les commandes seront différentes.

3) Avec MySQL Workbench

Afin de compléter cette tâche, il est aussi possible d’utiliser MySQL-Workbench, un outil multi-plateforme qui permet l’administration de vos bases de données MySQL en local ou à distance. MySQL Workbench vous offre aussi une option de modélisation et d’ingénierie inverse (créer un schéma à partir d’une base de données existante). C’est un très bon logiciel que je recommande même si ce n’est pas l’option idéale pour créer votre base de données.

Quelques commandes utiles pour MySQL

Si tout ne tourne pas rond avec MySQL, voici quelques commandes utiles à utiliser sur Ubuntu :

Se connecter à MySQL

Lancer MySQL

Arrêter MySQL

Vérifier l’état du serveur MySQL

Vérifier la présence du processus mysqld en mémoire

Créer une entité Doctrine

Une fois le serveur de base de données configuré et fonctionnel, vous pouvez vous amuser avec la console Symfony pour Doctrine. Cette console vous donne un accès rapide à un tas de commandes utiles pour développer efficacement votre application web.

Facebook Comments

10 réponses
  1. juliadiets.com
    juliadiets.com dit :

    Twig est extensible – Twig propose de base un certain nombre de fonctionnalites recurrentes que vous etes en droit d attendre d un moteur de template, mais pour les situations ou vous pourriez avoir des besoins specifiques, il est facile d etendre Twig.

    Répondre
  2. Guillaume Lewis GBOYOU
    Guillaume Lewis GBOYOU dit :

    Bonjour,
    Je trvaille avec Symfony 3 .
    J’ai fait les configuration pour créer une base de donnée mais cela me génère toujours des erreurs que voici:
    Merci d’avance pour aide.

    [Doctrine\DBAL\Exception\ConnectionException]
    An exception occured in driver: SQLSTATE[HY000] [1045] Access denied for us
    er ‘root’@’localhost’ (using password: NO)

    [Doctrine\DBAL\Driver\PDOException]
    SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using pas
    sword: NO)

    [PDOException]
    SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using pas
    sword: NO)

    Répondre
    • Guillaume Simard
      Guillaume Simard dit :

      Bonjour Guillaume,

      Le message indique qu’il est impossible pour doctrine de se connecter à la BD avec les accès fournis.
      Test proposé : vérifier que tu peux te connecter directement avec la ligne de commande mysql ou un client graphique.

      mysql -h host -u user -p monNomDeBD

      Tu peux aussi utiliser un client graphique comme https://www.webyog.com/ ou https://www.mysql.fr/products/workbench/.
      Ils te permettront de voir les bases de données gérées par MySQL et de vérifier que tes accès sont fonctionnels.

      Laisse-moi savoir si ça fonctionne!

      Bon succès,
      Guillaume

      Répondre
      • Guillaume Lewis GBOYOU
        Guillaume Lewis GBOYOU dit :

        Merci pour votre aide .
        J’ai exécuté la première commande cela me met aussi error
        mysql -h host -u root -p symfony
        Enter password:
        ERROR 2005 (HY000): Unknown MySQL server host ‘host’ (0)

        Répondre
        • Guillaume Simard
          Guillaume Simard dit :

          Bonjour Guillaume,

          Attention, host signifie « nom de l’hôte », en fait, c’est l’adresse IP du serveur de la base de données MySQL.
          Si le serveur est installé sur votre poste, il est possible d’utiliser localhost ou 127.0.0.1

          Répondre
    • Guillaume Simard
      Guillaume Simard dit :

      Bonjour Guillaume,
      MySQL Workbench est utilisé pour MySQL.
      D’autres outils sont disponibles pour les bases de données PostGreSQL, Oracle ou Microsoft SQL Server.
      Je demeure disponible pour répondre à vos question.

      Répondre
  3. Farid Argha
    Farid Argha dit :

    Bonjour,

    Merci pour ces explications claires. Je rencontre un souci d’ncoage utf8 quand je fais une recherche sur une chaine qui contient par exemple un accent avec Postgresql. Même en ajoutant l’option sur config.yml.
    options:
    1002: « SET NAMES ‘UTF8′ »

    Penses tu savoir d’où ça peut venir ? (Sachant que Postgres est bien en UTF_8).
    Merci

    Répondre

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.