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 -d
Mission 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