====== TP01 : Réorganisation et évolution d’une application PHP (MVC) ======
* **Durée : 4 heures**
* Technologie : PHP natif + MySQL
* Contraintes : pas de framework, architecture MVC imposée.
* JalonXX : indique une validation à faire auprès de Mme Thevenot avant de passer à la suite du travail
----
===== Contexte et objectif =====
Voici une application PHP **non structurée en MVC** de gestion d'une bibliothèque.
Cette application permet :
* d’ajouter des livres dans une base de données
* d’afficher la liste des livres existants.
Votre mission est de :
- Réorganiser cette application en **respectant le modèle MVC** (Modèle / Vue / Contrôleur).
- Implémenter une **évolution spécifique** de l’application (attribuée à chaque étudiant).
- Travail complémentaire : utiliser des classes
----
===== Ressources fournies =====
* Fichier **bibliotheque.php** (code initial)
* Script SQL **bibliotheque.sql** pour créer la base
===== Partie 1 – Application de départ =====
Le fichier fourni **bibliotheque.php** contient tout le code (HTML, PHP et SQL).
Le fichier **bibliotheque.php** est à enregistrer dans le dossier local de votre **serveur LAMP** (à installer selon le [[https://sio.lyc-lecastel.fr/doku.php?id=promo_2025:php:tp00&s[]=lamp|modèle de l'an dernier]] en transposant sous votre système Windows), dans un **dossier D3-A01BibliMVC** - Ce dossier devra être synchronisé avec un **dépôt du même nom dans votre gitea**.
getMessage());
}
// Ajout d’un livre
if (!empty($_POST['titre']) && !empty($_POST['auteur']) && !empty($_POST['annee'])) {
$stmt = $db->prepare("INSERT INTO livres (titre, auteur, annee) VALUES (?, ?, ?)");
$stmt->execute([$_POST['titre'], $_POST['auteur'], $_POST['annee']]);
}
// Récupération des livres
$stmt = $db->query("SELECT * FROM livres");
$livres = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
Bibliothèque
Gestion de la bibliothèque
Liste des livres
- = $livre['titre'] ?> - = $livre['auteur'] ?> (= $livre['annee'] ?>)
===== Partie 2 – Objectif =====
Jalon0 : Tester la version initiale non organisée selon le modèle MVC
Réorganiser ce code en respectant le schéma MVC :
* Modèle : gestion des livres et accès BDD.
* Contrôleur : réception des actions (ajouter, lister, etc.), le contrôleur appelle les fonctions du modèle et charge la vue correspondante.
* Vues : uniquement du HTML + affichage, les vues sont séparées
* à la racine le fichier index.php est la page d'accueil qui sert de routeur (choix de l’action → appel du contrôleur).
Jalon1 : Proposer une arborescence avec les fichiers et leur rôle précis
Coder et vérifier que l’application fonctionne toujours avec deux fonctionnalités de base :
* Ajouter un livre
* Afficher la liste des livres
Jalon2 : Validation du fonctionnement de l'application initiale en respectant le modèle MVC
===== Partie 3 – Évolutions =====
Chaque étudiant implémente une évolution en respectant le MVC.
Chaque évolution doit impliquer :
* une modification du modèle
* une adaptation du contrôleur
* une mise à jour de la vue
- **Étudiant 1 – Suppression d’un livre** (Morgann)
- Ajouter un bouton Supprimer dans la liste des livres.
- Implémenter la méthode de suppression dans le modèle.
- **Étudiant 2 – Recherche de livres** (Medhi)
- Ajouter un champ de recherche (titre/auteur).
- Implémenter une méthode de recherche dans le modèle.
- Afficher uniquement les résultats correspondants.
- **Étudiant 3 – Gestion des catégories** (Steve)
- Créer une table categories(id, nom).
- Associer chaque livre à une catégorie.
- Adapter le formulaire et l’affichage.
- **Étudiant 4 – Modification d’un livre** (Salomé)
- Ajouter un bouton Modifier dans la liste des livres.
- Permettre l’édition et la sauvegarde des informations du livre.
- **Étudiant 5 - Gestion du statut d’un livre (emprunté / disponible)** (Emile)
- ajouter un champ statut dans la table livres (par défaut "disponible").
- affichage du statut dans la liste + bouton "Emprunter" ou "Rendre".
- action changerStatut qui met à jour le champ.
L'application avec votre évolution sera le sujet de la revue de code de lundi, elle devra donc être **terminée pour lundi 15/09 14h**
======
===== Partie 4 – Evolution du code =====
- utilisation d'un header.php et footer.php pour limiter les redondances de code
- utilisation de classes :
- LivreControleur avec 2 méthodes au départ : ajouterLivre() et listerLivres()
- Livre avec les méthodes getAll() et ajouter($titre, $auteur, $annee)
- Database avec la méthode connexionDB()