Projet intermédiaire – Laravel (niveau avancé)
Niveau 4 / 5 – Projet Laravel plus costaud
Objectif
Réaliser une application Laravel plus complète que le Projet 0 : plusieurs modèles en relation, authentification avec rôles, Form Requests, policies, et (optionnel) API ou tests. Ce projet sert de pont entre le premier projet Laravel et le Projet 1 « Application complète ». Il fait pratiquer les notions des niveaux 3 et 4.
Prérequis : avoir validé le Projet 0 (ou équivalent) et suivi les modules 14 (Auth), 15 (Form Requests), 18 (Sécurité). Les modules 16 (API) et 17 (Tests) peuvent être partiellement utilisés en option.
Sujet proposé : « Blog avec commentaires »
Une application de type blog : des articles (titre, corps, date, auteur) et des commentaires (contenu, auteur, liés à un article). Les utilisateurs peuvent s’inscrire et se connecter. Seul l’auteur d’un article peut le modifier ou le supprimer ; un admin peut tout modifier. Les visiteurs non connectés voient les articles et commentaires en lecture seule.
Fonctionnalités attendues
| Zone | Fonctionnalité |
|---|---|
| Auth | Inscription, connexion, déconnexion (Breeze ou équivalent). Rôles : user et admin (champ role sur users ou table dédiée). |
| Articles | Liste paginée (tous ou par auteur), détail d’un article avec ses commentaires, création / modification / suppression (avec policy : auteur ou admin). |
| Commentaires | Sur la page détail d’un article : liste des commentaires ; formulaire pour ajouter un commentaire (réservé aux utilisateurs connectés). Suppression possible par l’auteur du commentaire ou l’admin. |
| Validation | Form Requests pour créer/modifier un article et pour créer un commentaire (titre, body, etc.). |
| Sécurité | Middleware auth sur création/édition ; policies (ArticlePolicy, CommentPolicy) ; CSRF, XSS, mots de passe hashés. |
Technique (obligatoire)
- Modèles :
User,Article,Comment. Relations : Article belongsTo User ; Comment belongsTo User et belongsTo Article ; User hasMany Articles, hasMany Comments ; Article hasMany Comments. - Migrations : tables
users(avecrole),articles(title, body, user_id, timestamps),comments(body, user_id, article_id, timestamps). - Contrôleurs :
ArticleController(resource),CommentController(store, destroy au minimum). Utilisation de Form Requests (ex.StoreArticleRequest,StoreCommentRequest). - Policies :
ArticlePolicy(view, create, update, delete) etCommentPolicy(create, delete) ; enregistrement dansAuthServiceProviderou découverte automatique. - Blade : layout, vues articles (index, show, create, edit), formulaire commentaire sur la page show ;
@can,@authpour afficher/masquer selon les droits. - Eager loading : sur la liste et le détail des articles, charger
useretcomments(oucomments.user) pour éviter N+1.
Optionnel (pour aller plus loin)
- API : routes API (index, show des articles) avec Sanctum ou sans auth pour la lecture ; API Resource pour le JSON.
- Tests : 2–3 tests feature (ex. accès liste articles en GET 200, création d’article en tant qu’utilisateur connecté, refus sans auth).
- Recherche : champ de recherche sur les articles (titre ou corps).
- Pagination des commentaires si beaucoup.
Étapes suggérées
- Projet :
laravel new blog; installer Breeze (ou équivalent) pour l’auth. - Rôles : ajouter un champ
roleà la tableusers(migration), valeurs ex.user,admin. Seed ou tinker pour créer un admin. - Modèles :
Article,Commentavec relations ; migrations avec clés étrangères. - Policies :
php artisan make:policy ArticlePolicy --model=Article,CommentPolicy; implémenter les méthodes selon rôle et propriétaire. - Form Requests :
StoreArticleRequest,UpdateArticleRequest,StoreCommentRequestavec règles de validation. - Contrôleurs : ArticleController (resource) et CommentController ; appeler
$this->authorize()où nécessaire. - Vues : layout, index (liste articles avec lien auteur), show (article + liste commentaires + formulaire commentaire), create/edit articles.
- Optimisation :
Article::with(['user', 'comments.user'])->paginate(10)(ou équivalent) pour éviter N+1. - (Optionnel) Tests feature et/ou routes API.
Critères de validation (projet intermédiaire)
| Critère | Exigence |
|---|---|
| Auth & rôles | Inscription, connexion, déconnexion ; au moins 2 rôles (user, admin) avec impact sur les droits |
| Modèles & relations | Article, Comment, User ; relations Eloquent correctes ; migrations avec FK |
| CRUD articles | Liste (paginée), création, lecture, modification, suppression avec policy (auteur ou admin) |
| Commentaires | Ajout sur un article (connecté), suppression (auteur du commentaire ou admin) |
| Form Requests | Validation centralisée pour au moins création article et création commentaire |
| Policies | ArticlePolicy et CommentPolicy utilisées dans les contrôleurs (et/ou Blade avec @can) |
| Sécurité | CSRF, échappement Blade, hash des mots de passe, pas d’accès non autorisé par URL |
| Qualité | Eager loading pour limiter N+1 ; code lisible (controllers fins, pas de logique métier dans les vues) |
Optionnel pour validation renforcée : quelques tests feature ou une petite API de lecture (articles).
Suite
Une fois ce projet validé, vous êtes prêt pour le Projet 1 – Application Laravel complète (API complète, tests exigés, déploiement) puis le Projet 2 – Projet libre encadré et la Certification Dresseur de Code.