diff --git a/labs/3/lab3.md b/labs/3/lab3.md new file mode 100644 index 0000000..eccd585 --- /dev/null +++ b/labs/3/lab3.md @@ -0,0 +1,102 @@ +# 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. +- + +## Consignes + +- Durée : 2 heures +- Tous vos projets `Symfony` sont à placer votre dossier `~/public_html`. +- Utilisez le serveur `londres.iut.local` pour tester vos pages et non la + commande `symfony server:start`. + +## Ressources + +- Documentation de Symfony sur les services : + [https://symfony.com/doc/5.x/doctrine.html](https://symfony.com/doc/5.x/doctrine.html) +- 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 de la commande + `symfony console make:crud` est interdite pour le moment !** + +## 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 `nm_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. diff --git a/lectures/3/cours_symfony_3a_3.pdf b/lectures/3/cours_symfony_3a_3.pdf index 3c7b8ae..6b41503 100644 Binary files a/lectures/3/cours_symfony_3a_3.pdf and b/lectures/3/cours_symfony_3a_3.pdf differ