Vous êtes développeur web junior dans une société spécialisée dans les solutions numériques pour l'enseignement supérieur. L'université de Lyon vous a confié la création d'un système de gestion moderne pour sa bibliothèque universitaire. Cette application doit permettre de :
- Consulter le catalogue des ouvrages disponibles
- Afficher les détails complets de chaque livre (auteur, genre, disponibilité, résumé)
- Permettre aux étudiants de filtrer les livres par genre littéraire ou scientifique
- Offrir une interface de consultation claire pour valoriser le patrimoine bibliographique
L'université souhaite moderniser son système d'information et a choisi Symfony pour sa robustesse et sa capacité à évoluer avec les besoins futurs. Ce premier sprint consiste à créer la structure de base du projet et les contrôleurs de consultation du catalogue.
Compétences techniques visées :
- Installer et configurer un projet Symfony
- Comprendre la structure d'un projet Symfony (dossiers, fichiers de configuration)
- Créer et configurer des contrôleurs
- Maîtriser le système de routage de Symfony
- Comprendre le cycle requête/réponse dans une architecture MVC
- Utiliser les annotations/attributs pour le routage
- Retourner différents types de réponses (HTML, JSON)
Compétences transversales :
- Autonomie dans la consultation de documentation officielle
- Organisation et structuration du code
- Résolution de problèmes techniques
Mission : Créez un nouveau projet Symfony appelé bibliotheque-universitaire
- 
Créer un nouveau projet Symfony : symfony new bibliotheque-universitaire --webapp cd bibliotheque-universitaire
- 
Démarrez le serveur de développement et vérifiez que l'installation fonctionne 
symfony serve -dMission autonome : Analysez l'arborescence du projet et identifiez le rôle de chaque dossier principal (src/, config/, templates/, public/)
Mission : Créez un contrôleur AccueilController
Spécifications techniques :
- Route principale : /(méthode GET)
- Nom de route : app_accueil
- Méthode : index()
- Retour : réponse HTML Twig
Code de départ :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class AccueilController extends AbstractController
{
    // À compléter
}Mission autonome : Modifiez la méthode pour afficher :
- Le nom de la bibliothèque universitaire
- Les horaires d'ouverture (simulés)
- Un compteur fictif du nombre d'ouvrages disponibles (utilisez une variable)
Mission : Créez LivreController avec une méthode pour lister tous les livres, ou un service LivresStore mettant à
disposition les données simulées.
Données à simuler :
$livres = [
    1 => [
        'id' => 1,
        'titre' => 'Introduction aux Algorithmes',
        'auteur' => 'Thomas H. Cormen',
        'isbn' => '978-2100545261',
        'genre' => 'informatique',
        'annee_publication' => 2010,
        'nombre_pages' => 1200,
        'disponible' => true,
        'nombre_exemplaires' => 3,
        'resume' => 'Manuel de référence couvrant les algorithmes fondamentaux et les structures de données.',
        'editeur' => 'Dunod',
        'cote' => 'INF.004.COR'
    ],
    2 => [
        'id' => 2,
        'titre' => 'Le Rouge et le Noir',
        'auteur' => 'Stendhal',
        'isbn' => '978-2070360024',
        'genre' => 'litterature',
        'annee_publication' => 1830,
        'nombre_pages' => 720,
        'disponible' => false,
        'nombre_exemplaires' => 0,
        'resume' => 'Roman emblématique du XIXe siècle suivant les ambitions de Julien Sorel.',
        'editeur' => 'Gallimard',
        'cote' => 'LIT.840.STE'
    ],
    3 => [
        'id' => 3,
        'titre' => 'Physique Quantique - Fondements et Applications',
        'auteur' => 'Michel Le Bellac',
        'isbn' => '978-2759807802',
        'genre' => 'sciences',
        'annee_publication' => 2013,
        'nombre_pages' => 450,
        'disponible' => true,
        'nombre_exemplaires' => 2,
        'resume' => 'Introduction moderne à la mécanique quantique avec applications pratiques.',
        'editeur' => 'EDP Sciences',
        'cote' => 'PHY.530.LEB'
    ]
];Spécifications :
- Route : /catalogue(GET)
- Nom : app_catalogue_liste
- Affichage : titre, auteur, disponibilité et nombre d'exemplaires pour chaque livre
Mission autonome : Ajoutez une route /livre/{id} pour afficher le détail complet d'un ouvrage
Contraintes :
- Vérifiez que l'ID existe, sinon retournez une erreur 404
- Affichez toutes les informations du livre (titre, auteur, ISBN, résumé, etc.)
- Utilisez createNotFoundException()si le livre n'existe pas
Mission : Créez une route /catalogue/genre/{genre} qui filtre les livres par genre
Genres disponibles : informatique, litterature, sciences, histoire
Mission autonome : Ajoutez une route /api/catalogue qui retourne tous les livres au format JSON
Indice : Utilisez JsonResponse au lieu de Response
Mission : Créez /statistiques qui affiche :
- Nombre total d'ouvrages dans le catalogue
- Répartition par genre
- Nombre de livres disponibles vs empruntés
- Auteur le plus représenté dans la collection
Mission : Ajoutez des liens de navigation dans vos réponses HTML :
- Lien vers l'accueil depuis toutes les pages
- Liens vers les différents genres
- Lien vers les statistiques
- Retour au catalogue depuis les pages de détail
Mission autonome : Améliorez la gestion d'erreurs :
- Messages d'erreur personnalisés pour les IDs de livres invalides
- Gestion des genres inexistants avec message informatif
- Affichage d'un message quand aucun livre n'est trouvé pour un genre
Mission : Testez manuellement toutes vos routes :
- Vérifiez l'accès à chaque page
- Testez les liens de navigation
- Validez l'affichage des données
- Corrigez les éventuels bugs
