Aller au contenu principal

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

ZoneFonctionnalité
AuthInscription, connexion, déconnexion (Breeze ou équivalent). Rôles : user et admin (champ role sur users ou table dédiée).
ArticlesListe paginée (tous ou par auteur), détail d’un article avec ses commentaires, création / modification / suppression (avec policy : auteur ou admin).
CommentairesSur 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.
ValidationForm 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 (avec role), 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) et CommentPolicy (create, delete) ; enregistrement dans AuthServiceProvider ou découverte automatique.
  • Blade : layout, vues articles (index, show, create, edit), formulaire commentaire sur la page show ; @can, @auth pour afficher/masquer selon les droits.
  • Eager loading : sur la liste et le détail des articles, charger user et comments (ou comments.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

  1. Projet : laravel new blog ; installer Breeze (ou équivalent) pour l’auth.
  2. Rôles : ajouter un champ role à la table users (migration), valeurs ex. user, admin. Seed ou tinker pour créer un admin.
  3. Modèles : Article, Comment avec relations ; migrations avec clés étrangères.
  4. Policies : php artisan make:policy ArticlePolicy --model=Article, CommentPolicy ; implémenter les méthodes selon rôle et propriétaire.
  5. Form Requests : StoreArticleRequest, UpdateArticleRequest, StoreCommentRequest avec règles de validation.
  6. Contrôleurs : ArticleController (resource) et CommentController ; appeler $this->authorize() où nécessaire.
  7. Vues : layout, index (liste articles avec lien auteur), show (article + liste commentaires + formulaire commentaire), create/edit articles.
  8. Optimisation : Article::with(['user', 'comments.user'])->paginate(10) (ou équivalent) pour éviter N+1.
  9. (Optionnel) Tests feature et/ou routes API.

Critères de validation (projet intermédiaire)

CritèreExigence
Auth & rôlesInscription, connexion, déconnexion ; au moins 2 rôles (user, admin) avec impact sur les droits
Modèles & relationsArticle, Comment, User ; relations Eloquent correctes ; migrations avec FK
CRUD articlesListe (paginée), création, lecture, modification, suppression avec policy (auteur ou admin)
CommentairesAjout sur un article (connecté), suppression (auteur du commentaire ou admin)
Form RequestsValidation centralisée pour au moins création article et création commentaire
PoliciesArticlePolicy 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.