You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
4.8 KiB

# TP3.1: Base de données avec Doctrine
> This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-nc-sa/4.0/).
> Permission is explicitly granted to copy, distribute and/or modify this document for educational purposes under the terms of the CC BY-NC-SA license.
## 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
- De préférence, ne placez **PAS** vos projets `Symfony` dans votre dossier `~/public_html` (les quotas explosent !).
- N'utilisez PAS le serveur `londres.uca.local` pour tester vos pages mais 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`.
- **<span style="color:red">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.</span>**
## 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/components/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.
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.