Mini framework PHP : ce qu'il faut comprendre sous Laravel
Construire un mini framework PHP : router, contrôleurs, vues et PDO, plus SQL à jointures, Singleton et Repository vus dans E29. Avec le défi Lara Academy.
Aussi en : العربية

Construire un mini framework PHP est la meilleure façon de comprendre ce que Laravel fait à ta place. Dans l'épisode E29, Mehdi part d'une boutique Laravel pour montrer ce qu'il faut savoir sous le framework : une requête SQL à deux jointures, le Singleton, le Repository et DevTools. Le défi Lara Academy en découle : construire ton mini Laravel, l'expliquer et partager ton dépôt GitHub.
Pourquoi Laravel ne dispense pas de SQL ?
L'exemple de l'épisode : tu as une boutique Laravel qui fonctionne. Le client te demande le total des commandes payées, pour chaque client. Il y a trois tables : users, orders et order_items.
Personne ne te demandera combien de commandes Artisan tu connais par cœur. On te demandera si le résultat est juste. Pour cela, il faut savoir :
- relier les tables avec des jointures ;
- filtrer avec WHERE (seulement les commandes payées) ;
- regrouper avec GROUP BY et additionner avec SUM ;
- lire la requête SQL générée et expliquer pourquoi elle donne ce résultat.
Voici une requête qui reprend l'exemple de l'épisode (montants stockés en centimes) :
SELECT u.id, u.name,
SUM(i.quantity * i.unit_price_cents) AS total_cents
FROM orders AS o
JOIN users AS u ON u.id = o.user_id
JOIN order_items AS i ON i.order_id = o.id
WHERE o.status = 'paid'
GROUP BY u.id, u.name
ORDER BY u.id;Eloquent peut construire la même requête avec son Query Builder (join, where, selectRaw, groupBy). Il simplifie l'écriture, il n'annule pas SQL : si le total est faux, c'est en lisant le SQL que tu sauras où chercher.
Qu'est-ce qu'un Singleton, en PHP natif et dans le Service Container ?
En PHP natif, un Singleton est une classe qui, appelée deux fois par la même méthode, renvoie la même instance, c'est-à-dire le même objet.
Dans Laravel, le Service Container peut gérer cela pour toi avec singleton, sans que tu écrives tout le mécanisme :
$this->app->singleton(Catalog::class, fn () => new Catalog());
// Ensuite : app(Catalog::class) === app(Catalog::class) → trueLa vraie question reste la tienne : que mets-tu dans cette instance, et quelle est sa durée de vie ? Par exemple, l'utilisateur connecté n'a rien à faire dans un objet partagé.
À quoi sert un Repository, et faut-il en mettre partout ?
Le Repository sépare l'accès aux données de la logique métier. Le code qui gère une commande n'a plus de requêtes dispersées partout ; il demande simplement « donne-moi cette commande » à une interface.
interface OrderRepository
{
public function findById(int $id): ?OrderRecord;
}L'épisode montre deux implémentations de cette même interface : une avec PDO, une avec Eloquent. Le code qui utilise l'interface ne change pas quand on passe de l'une à l'autre.
Deux nuances importantes :
- Eloquent n'est pas un Repository ;
- tous les CRUD n'ont pas besoin de cette couche supplémentaire. On la choisit selon le besoin.
Comment chercher un bug au lieu de deviner ?
Comme un médecin qui utilise l'échographie pour voir à l'intérieur, le développeur a besoin de voir ce qui se passe dans le site au lieu de deviner. La démarche proposée :
- ouvre l'onglet Network et regarde la requête envoyée et la réponse du serveur ;
- continue côté backend et regarde la requête SQL réellement exécutée ;
- comprends, puis teste ta correction.
Et l'honnêteté sur son niveau ?
L'épisode termine sur un point qui dépasse le code : le travail est une responsabilité. Si tu dis à un client « je sais le faire », sois franc sur ton niveau et pose des questions quand tu ne sais pas. Dire « je ne sais pas » n'est pas une honte ; faire croire qu'on maîtrise, et refuser d'apprendre, l'est davantage.
Que doit contenir un mini framework PHP ?
L'idée est de comprendre ce qu'il y a derrière le framework en l'écrivant avec ton propre code PHP. Un mini framework contient au moins :
- un routeur qui associe une URL à une fonction ou à un contrôleur ;
- des contrôleurs qui coordonnent sans écrire de SQL ni de HTML ;
- des vues qui affichent les données ;
- un accès aux données avec PDO et des requêtes préparées que tu comprends ;
- en bonus, un petit container qui te fournit les objets dont tu as besoin.
Tu n'as pas besoin de partir de zéro : l'article Le MVC en PHP expliqué donne le code d'un Router, d'un Controller, d'un Model PDO et d'une View, tiré du cours E10. Commence petit : une route, un contrôleur, une vue. Construis, teste, explique.
Comment participer ?
La page du défi se trouve sur laraibi.com, Academy, Défi. Pour proposer ton projet, prépare :
- un dépôt GitHub public ;
- un README qui explique l'installation et comment lancer le projet ;
- une démo ;
- quelques lignes sur ce que tu as appris.
Il faut un compte confirmé : si tu n'en as pas, « Créer un compte », puis le lien reçu par email permet de choisir ton mot de passe et d'activer le compte. Chaque projet est relu avant d'apparaître sur la page ; une fois accepté, la communauté peut voir le code et l'explication, et apprendre avec.
Questions fréquentes
Faut-il connaître Laravel pour construire un mini framework PHP ?
Non. Il faut surtout PHP, les requêtes préparées avec PDO et l'idée du MVC. Connaître Laravel aide à reconnaître les pièces (routes, contrôleurs, vues, container), mais le but est justement de les écrire toi-même.
Eloquent remplace-t-il SQL ?
Non. Eloquent et son Query Builder construisent la requête pour toi, mais si un total est faux, il faut lire le SQL généré et comprendre les jointures, le WHERE, le GROUP BY et le SUM.
Mon mini framework doit-il avoir un container et un Repository ?
Non, ce sont des bonus. Le cœur, c'est un routeur, des contrôleurs, des vues et un accès aux données avec PDO. Un Repository n'est utile que si le besoin le justifie.
Que faut-il fournir pour participer au défi ?
Un dépôt GitHub public, un README d'installation, une démo et quelques lignes sur ce que tu as appris, avec un compte confirmé sur laraibi.com. Chaque projet est relu avant d'apparaître sur la page du défi.
À retenir
- Eloquent facilite le travail, mais une requête avec deux jointures, WHERE, GROUP BY et SUM se comprend en SQL.
- Le Service Container gère un singleton pour toi ; à toi de décider de son contenu et de sa durée de vie.
- Le Repository sépare données et logique métier ; Eloquent n'en est pas un, et tout CRUD n'en a pas besoin.
- DevTools d'abord (Network), puis le SQL exécuté : on observe avant de corriger.
- Le défi : un mini framework PHP (routeur, contrôleurs, vues, PDO), un dépôt GitHub public avec README, démo et apprentissages.
Regarder les épisodes
- Laravel sans zapper les bases : PHP, SQL et design patterns (E29)
- Défi PHP : la page du mini Laravel est en ligne (E31)
Sources
- PHP Data Objects (PDO), documentation officielle de PHP
- Service Container, documentation officielle de Laravel
Pour aller plus loin
- Le code d'un MVC fait main : Le MVC en PHP expliqué et le cours E10.
- Les requêtes préparées avec PDO : le mini CRUD PHP + MySQL (E05).
- Pour observer l'exécution pas à pas : déboguer JavaScript et PHP (E24).
- Le parcours : Développement Web Full Stack.
- Apprendre avec l'IA sans perdre la main : coder avec ChatGPT sans copier-coller.
Quiz : 3 questions pour vérifier
Rien n’est envoyé : tes réponses restent dans ton navigateur.
Rédigé à partir du cours vidéo et de sa transcription, avec l’aide d’outils d’IA, relu et vérifié par Mehdi Laraibi le 4 novembre 2026.



