• 8 hours
  • Hard

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/27/23

Initialisez votre projet Symfony

Initialisez votre projet Symfony

Le but de ce chapitre va être d’initialiser le projet qui nous servira de fil rouge tout au long de ce cours.

Ce projet, volontairement très simple, va nous placer dans la position d’une bibliothèque qui veut publier une API sur les livres qu’elle possède, ainsi que sur les auteurs de ces livres.

De plus, un système de sécurité sera mis en place pour ne permettre aux utilisateurs sans droits particuliers que la consultation, et aux administrateurs de créer et modifier livres et auteurs.

Installez Symfony

Nous n’allons pas détailler ici l’installation de l’exécutable “Symfony”, et nous allons considérer que les prérequis nécessaires à cette installation sont déjà remplis.

Par défaut, le framework Symfony peut s’installer :

  • en version basique, avec uniquement les bundles requis pour un fonctionnement minimal ; 

  • ou en version web, avec de nombreux bundles supplémentaires généralement utilisés lorsqu’on veut réaliser un site web (Twig pour le moteur de template, Doctrine pour accéder à une base de données, etc.).

Nous souhaitons simplement proposer une API, nous allons donc initialiser le projet avec la version basique, et nous rajouterons les divers bundles dont nous aurons besoin au fur et à mesure que ceux-ci apparaîtront.

Pour initialiser votre projet, dans un terminal, vous pouvez taper  symfony new Books.

Books  est le nom de notre projet, n’hésitez pas à le changer si vous le désirez.

En tapant la commande “symfony new Books”, le terminal crée un nouveau projet et nous informe qu’il est prêt !
Initialisation du projet Symfony

Pour vérifier que l’installation s’est bien déroulée, toujours dans le terminal, vous pouvez vous rendre dans le dossier Books  qui a été créé avec la commande  cd Books , puis lancer le serveur de Symfony avec  symfony server:start .

Cela lancera le serveur de Symfony, et en vous rendant sur l’URL proposée, vous devriez voir quelque chose comme ceci :

En cliquant sur le lien proposé, on arrive sur une page de bienvenue Symfony – l’application est bien installée.
Vérification de l’installation

Créez une toute première entité

Maintenant que le framework est installé, nous voulons créer nos premières données. En particulier, une toute première table qui contiendra quelques informations basiques sur les livres que nous allons mettre à disposition.

Il est possible de créer cette entité à la main, mais Symfony nous propose de nombreux outils pour nous faciliter la vie, et il serait dommage de s’en passer.

Installez le maker-bundle

Le premier outil est le maker-bundle. Cela permet de demander à Symfony de nous créer certains éléments via la ligne de commande, comme par exemple des contrôleurs ou encore des entités.

Pour installer ce bundle, il suffit de taper  composer require symfony/maker-bundle --dev   dans votre terminal.

Ajoutez Doctrine

Pour interagir avec une base de données, Symfony utilise ce qu’on appelle un ORM (Object Relational Mapping) qui permet de faire le lien entre le code PHP et la base elle-même

Comme nous souhaitons créer une entité, et par la suite la transformer en table dans notre base de données, nous devons installer également le bundle Doctrine. Pour cela, rien de plus simple ; dans votre terminal :  composer require orm   .

Créez l’entité book

C’est bon, nous avons désormais tous les outils pour créer notre entité Book  , c'est-à-dire “Livre”.  Il ne reste plus qu’à demander à Symfony de nous aider un peu grâce à la commande php bin/console make:entity   .

En créant l’entité Book, nous affirmons son nom de classe et une propriété title de type String, qui ne peut pas être null.
Création de l’entité Book

On suit les instructions, et à la fin nous obtenons deux nouveaux fichiers.

Ici, j’ai créé une entité extrêmement simple avec deux champs :

  • title : le titre du livre (en laissant toutes les options par défaut) ;

  • coverText : la quatrième de couverture, de type text et nullable. 

Une fois ceci complété, nous pouvons voir que deux fichiers supplémentaires ont été créés :

  • Book.php , qui est l’entité proprement dite ;

  • et BookRepository.php qui est en quelque sorte le “manager” de l’entité, et qui nous permettra de requêter la base. 

Le fichier Book.php se trouve dans le dossier Entity. Le fichier BookRepository.php se trouve dans le dossier Repository.
Fichiers Book.php et BookRepository.php créés

Voici le contenu du fichier Books.php  :

<?php
// src\Entity\Book.php

namespace App\Entity;

use App\Repository\BookRepository;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: BookRepository::class)]
class Book
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column(type: 'integer')]
    private $id;

    #[ORM\Column(type: 'string', length: 255)]
    private $title;

    #[ORM\Column(type: 'text', nullable: true)]
    private $coverText;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;
        return $this;
    }

    public function getCoverText(): ?string
    {
        return $this->coverText;
    }

    public function setCoverText(?string $coverText): self
    {
        $this->coverText = $coverText;
        return $this;
    }
}

Configurez la base de données

Maintenant que notre première entité est créée, il faut l’envoyer sur la base de données, et pour cela, créer notre base de données.

La première chose à faire est de configurer l’accès à votre base. Pour cela, copiez-collez le fichier .env  et renommez la copie en .env.local  .

Ce fichier contiendra vos accès réels à votre base et sera utilisé automatiquement par Symfony. Lorsque vous voudrez passer votre projet en mode production, il faudra créer un autre fichier nommé .env.prod .

Dans ce fichier, configurez votre base de données. Comme je suis sous Windows et que ma base de données est une base MySQL configurée par défaut par Wamp, voici ce que j’ai écrit :

DATABASE_URL="mysql://root:@127.0.0.1:3306/Books"

Une fois votre chaîne de connexion configurée, vous pouvez créer votre base grâce à Doctrine dans votre terminal :  php bin/console doctrine:database:create   .

Et finalement, il ne reste plus qu’à dire à Doctrine de transformer l’entité en véritable table avec la commande  php bin/console doctrine:schema:update --force   .

Vérifiez que votre table est bien créée avec l’outil de votre choix : MySQL Workbench, un plugin dans votre éditeur de texte, ou votre IDE en ligne de commande. Ici, parce que c’est installé directement avec Wamp, j’ai utilisé phpMyAdmin pour vérifier que la structure correspond bien à ce que j’attendais.

Dans l’onglet Structure de phpMyAdmin, on voit bien notre table avec id, title et cover_text.
Vérification de la création de la table avec phpMyAdmin

Ajoutez des fixtures

Allons un tout petit peu plus loin. Avoir une base de données et une table, c’est très bien, mais avoir des données à exploiter, c’est encore mieux.

Pour cela, nous allons créer des fixtures. En d’autres termes, nous allons écrire du code qui va générer automatiquement des données qui vont s’insérer dans notre base de données.

Là encore, laissons Symfony, et plus précisément Doctrine, nous aider en installant un add-on pour Doctrine qui va nous permettre d’écrire et d’exécuter simplement nos fixtures : composer require orm-fixtures --dev   .

Cette commande a normalement créé un nouveau fichierAppFixture.php  , déjà prérempli :

On retrouve AppFixture.php dans le dossier DataFixtures. Le fichier contient déjà des informations.
Le fichier AppFixture.php à la création

Ce fichier va contenir nos instructions pour créer des données.

<?php
// src\DataFixtures\AppFixtures.php

namespace App\DataFixtures;

use App\Entity\Book;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;

class AppFixtures extends Fixture
{
    public function load(ObjectManager $manager): void
    {
        // Création d'une vingtaine de livres ayant pour titre
        for ($i = 0; $i < 20; $i++) {
            $livre = new Book;
            $livre->setTitle('Livre ' . $i);
            $livre->setCoverText('Quatrième de couverture numéro : ' . $i);
            $manager->persist($livre);
        }

        $manager->flush();
    }
}

Une fois le code écrit, il faut l’exécuter, et pour cela, tapez en ligne de commande  php bin/console doctrine:fixtures:load   .

Si tout s’est bien passé, alors allez vérifier dans votre base de données (par exemple avec phpMyAdmin, ou un plugin dans votre éditeur de code favori) : vous devriez voir vos données.

Dans phpMyAdmin on voit que les livres générés sont bien présents, les fixtures fonctionnent.
Vérification sur phpMyAdmin que les fixtures fonctionnent

En résumé

  • Initialiser un projet Symfony se fait simplement grâce à l'exécutable Symfony.

  • Lorsqu'un outil ou une bibliothèque est manquant, il peut s'installer grâce à la ligne de commandes et l'exécutable "composer".

  • La création d'une entité est la première étape pour mettre à jour la base de données.

  • Les fixtures sont un moyen pratique de remplir votre base de données avec un jeu de fausses données pour faciliter les tests.

Et voici pour ce chapitre ! Nous avons désormais une application Symfony minimale avec une entité Book , et même des données à l’intérieur.  Tout est désormais prêt pour rentrer dans le vif du sujet et écrire notre toute première API ! 

Example of certificate of achievement
Example of certificate of achievement