Accueil » Symfony 6 Créer une entité

Symfony 6 Créer une entité

Une entité dans Symfony 6 est une classe qui représente un objet. Dans cette procédure on va utiliser l’ORM (Mapping objet-relationnel) Doctrine qui va permettre de lier les données de la base de données aux entités. Dans cette procédure, nous allons voir comment créer une entité dans Symfony 6, la lié a une base de données et utilisé l’entité.

Symfony

Prérequis :

  • Une machine qui possède Symfony 6

Créer une entité dans Symfony 6 :

Avant de créer l’entité, on va d’abord créer un nouveau projet Symfony 6

symfony new --webapp projet_entitee

Ensuite on se rend dans le dossier du projet

cd projet_entitee

Ouvrir le projet avec un IDE, je vous conseil VScode car vous pouvez vous éditer votre projet à l’aide de l’extension « Explorateur Distant » qui utilise le SSH.

On va installer MariaDB comme SGBD et créer un compte utilisateur « symfony » à l’aide de la procédure de création de serveur Lamp.
En exécutant les lignes de commandes présentes dans la catégorie Installation et MariaDB.

Puis ensuite on va installer PhpMyAdmin pour administrer et contrôler les données, en exécutant les commandes de la catégorie PhpMyAdmin.

Créer une base de données « projet_entitee ».

Configurer l’accès à la base de données dans le fichier .env, il faut choisir une ligne qui commence par DATABASE_URL et qui contient le nom du SGBD utilisé

Vous allez avoir besoin des informations :

  • Nom d’utilisateur de la base de données
  • Mot de passe de la base de données
  • Nom de la base de données
  • Version de la base de données

Pour obtenir la version de la base données, vous pouvez l’obtenir depuis PhpMyAdmin sur la page d’accueil une fois connecté :

Symfony 6 créer une entité version Mariadb
DATABASE_URL="mysql://nom_utilisateur:mot_de_passe@127.0.0.1:3306/nom_bdd?serverVersion=version_mariadb&charset=utf8mb4"

avec mes valeurs 

DATABASE_URL="mysql://symfony:password@127.0.0.1:3306/projet_entitee?serverVersion=mariadb-10.5.15&charset=utf8mb4"

Puis dans Symfony nous allons créer une entité de test qui aura la structure suivante en base de données :

Article(id, date_publication, titre, contenu)

  • id: int
  • date_publication : Date
  • titre : Varchar (50)
  • contenu : Text

La clé primaire id va être créer automatiquement donc il ne faudra pas la créer dans console Symfony.

Création de l’entité avec la commande :

symfony console make:entity
 Class name of the entity to create or update (e.g. GrumpyPizza):
 > Article

 created: src/Entity/Article.php
 created: src/Repository/ArticleRepository.php
 
 Entity generated! Now let's add some fields!
 You can always add more fields later manually or by re-running this command.

 New property name (press <return> to stop adding fields):
 > date_publication

 Field type (enter ? to see all types) [string]:
 > date

 Can this field be null in the database (nullable) (yes/no) [no]:
 > no

 updated: src/Entity/Article.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > titre

 Field type (enter ? to see all types) [string]:
 > string

 Field length [255]:
 > 50

 Can this field be null in the database (nullable) (yes/no) [no]:
 > no

 updated: src/Entity/Article.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > contenu

 Field type (enter ? to see all types) [string]:
 > text

 Can this field be null in the database (nullable) (yes/no) [no]:
 > no

 updated: src/Entity/Article.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 > 


           
  Success! 
           

 Next: When you're ready, create a migration with php bin/console make:migration

Ensuite on peut créer une migration Symfony :

symfony console make:migration

Si la migration affiche ce message alors vous pouvez continuer

symfony 6 créer une entité

Ensuite migrer les informations :

symfony console doctrine:migrations:migrate

# ou avec

symfony console d:m:m

Remplir la base de données de données :

Il est possible de remplir votre base de données à l’aide de plusieurs moyens :

  • Manuellement depuis PhpMyAdmin ou votre base de données
  • Automatiquement avec des Fixtures

Dans cette procédure, nous allons ajouter les données directement dans la base de données.
La première étape est de se rendre dans PhpMyAdmin puis dans la base de données lié au projet Symfony.
Ensuite on se rende dans la table qui possède le nom de l’entité que nous avons crée dans Symfony.

symfony 6 créer une entité ajout de données en base de données
  • 1 : Choisir la section insérer
  • 2 : Remplir les données
  • 3 : Valider l’insertion de données en cliquant sur le bouton insérer

Création d’un Controller pour traiter les données

Si vous ne savez pas ce qu’est un Controller, je vous invite à aller voir ma procédure sur les controller Symfony avant de continuer.

Création du Controller :

symfony console make:controller
symfony 6 créer une entité et son controller

Récupérer les données de la base de données :

Ensuite il faut se rendre dans fichier qui se trouver dans l’emplacement src/Controller/ArticleController.php pour le modifier.

Nous allons créer la route /articles qui va nous retourner tous les articles :

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\ArticleRepository;

class ArticleController extends AbstractController
{
    #[Route('/articles', name: 'app_list_articles')]
    public function index(ArticleRepository $articleRepository): Response
    {
        $articles = $articleRepository->findAll();
        dd($articles);

        return $this->render('article/index.html.twig', [
            'articles' => $articles,
        ]);
    }
}

Nous allons aussi créer la route qui va récupérer uniquement un article a l’aide de son id.

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\ArticleRepository;

class ArticleController extends AbstractController
{
    #[Route('/articles', name: 'app_list_articles')]
    public function index(ArticleRepository $articleRepository): Response
    {
        $articles = $articleRepository->findAll();
        dd($articles);

        return $this->render('article/index.html.twig', [
            'articles' => $articles,
        ]);
    }

    #[Route('/article/{id}', name: 'app_show_article')]
    public function showArticle(int $id, ArticleRepository $articleRepository): Response
    {
        $article = $articleRepository->find($id);
        dd($article);

        return $this->render('article/show.html.twig', [
            'article' => $article,
        ]);
    }
}

Ajouter des données en base de données :

Nous allons créer une route avec la forme /article/add qui va créer un article (statique).

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\ArticleRepository;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;

class ArticleController extends AbstractController
{
    #[Route('/articles', name: 'app_list_articles')]
    public function index(ArticleRepository $articleRepository): Response
    {
        $articles = $articleRepository->findAll();
        dd($articles);

        return $this->render('article/index.html.twig', [
            'articles' => $articles,
        ]);
    }

    #[Route('/article/add', name: 'app_add_article')]
    public function addArticle(EntityManagerInterface $em): Response
    {
        $article = new Article();
        $article->setTitre('Titre de l\'article');
        $article->setContenu('Contenu de l\'article');
        $article->setDatePublication(new \DateTime());
        
        $em->persist($article);
        $em->flush();

        die();
        return $this->render('article/add.html.twig');
    }

    #[Route('/article/{id}', name: 'app_show_article')]
    public function showArticle(int $id, ArticleRepository $articleRepository): Response
    {
        $article = $articleRepository->find($id);
        dd($article);

        return $this->render('article/show.html.twig', [
            'article' => $article,
        ]);
    }
}

Sources :

https://symfony.com/doc/current/doctrine.html

Susceptible de vous intéresser :