# TP3: Base de données avec Doctrine ## Objectifs Les objectifs de ce TP sont : - Comprendre et mettre en œuvre les opérations CRUD (Create, Read, Update, Delete) avec Doctrine dans une application Symfony. - Avancer vers des fonctionnalités de recherche avancées. - Ajouter plus de fonctionnalités de stockage en BDD et d'interactions entre les tables. ## Consignes - Durée : 2 heures - Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. - Utilisez le serveur `londres.uca.local` pour tester vos pages et non la commande `symfony server:start`. - Nous allons continuer notre réseau social nommé `TweetTok` où les messages sont nommés des `Twok`. - Lors du précédent TP, les `Twoks` étaient stockés en dur dans un fichier JSON. - Nous allons maintenant les stocker en BDD. - Repartez donc de votre précédent projet `TweetTok`. - **Attention! L'utilisation des commandes `symfony console make:crud` et `symfony console make:form` sont interdites pour le moment ! L'objectif est de comprendre ce qu'elles font.** ## Ressources - Documentation de Symfony sur Doctrine : [https://symfony.com/doc/5.x/doctrine.html](https://symfony.com/doc/5.x/doctrine.html) ## Partie 1: Import des Twoks existants avec Doctrine (30 min) 1. **Configuration de la base de données :** - Assurez-vous que Doctrine ORM est bien installé : ```bash composer require symfony/orm-pack composer require --dev symfony/maker-bundle ``` - Configurez le fichier `.env` de Symfony pour vous connecter à votre base de données (avec `SQLite` dans un premier temps). 2. **Création de l'entité `Twok` :** Lors du précédent TP, nous avions utilisé un service nommé `TwokManager` pour géger les `Twoks`. Nous allons maintenant les représenter sous forme d'une entité : - Utilisez la console Symfony pour générer une entité `Twok` et son registre correspondant. Faites en sorte que les champts soient les même que dans le fichier JSON du TP précédent (`id`, `author`, `twok`, `created_at`) en faisant attention aux types. - Créez la base de donnée, créez une migration et appliquez la. - Utilisez l'outil `psql` pour vérifier la bonne exécution de votre migration. 3. **Import des précédents messages** : Félicitations ! Vous avez maintenant une table `Twok` toute vide et plusieurs `Twoks` stockés dans votre fichier JSON. - Mofifiez votre service `TwokManager` pour écrire en BDD les `Twok` contenus dans le fichier JSON. Pour cela aidez vous de la fonction [`Serializer`](https://symfony.com/doc/current/serializer.html) de Symfony. - Validez avec `psql` que vos `Twoks` sont maintenant bien en BDD. - Nettoyez le code existant, nous n'avons plus besoin du fichier JSON. ## Partie 2: Recherche avancée (30 min) 1. Ajoutez les fonctionnalités suivantes à votre `TwokRepository` : - Recherche de Twok par ID; - Recherche de Twok par auteur; - Recherche de Twok par date (avant/après); - Recherche de Twok par hashtag dans le champ `content`. ## Partie 3: Un CRUD très rudimentaire (30 min) 1. Implémentez dans votre controlleur les routes et les méthodes permettant de lister, d'ajouter, d'éditer et supprimer des `Twoks`. **Ne perdez pas de temps à comprendre comment utiliser Twig, ce sera pour une prochaine fois.** ## Partie 4: Fonctionnalités avancées (30 min +) 1. **Gestion des hashtags :** - Ajoutez un champ `hashtag` dans la table `Twok` dans lequel vous ajoutez les différents hashtags de message lors de l'insertion. Attention, ne modifiez pas le contenu du message ! - Appliquez ce changement pour les messages existants. 2. **Gestion des utilisateurs :** - Ajoutez une entité `User` qui a comme champs : `username`, `real_name`, `favorites`. - Remplissez la table avec les différents utilisateurs ayant déjà posté un `Twok`. - Pour chaque utilisateur choisissez deux ou trois messages favoris et remplissez le champ `favorite` en adéquation. 3. **Vérifications avant insertion/modification :** - Avant d'insérer ou de modifier un Twok, assurez-vous que le contenu n'est pas vide et ne dépasse pas 180 caractères. - Empêchez un 4. **Compteur d'impression des `Twoks` :** - Ajouter un champ `nb_prints` dans la table `Twok` et incrémentez sa valeur à chaque fois que le `Twok` est affiché. ## Pour aller plus loin - Implémentez des jeux de test pour vos codes.