{"uuid":"8ed45b6e-d89b-4ae9-94e2-ed8476c00080","slug":"creer-son-propre-mini-framework-php-from-scratch","title":"Créer son propre mini-framework PHP from scratch","author":"cedric@abonnel.fr","published":true,"published_at":"2025-11-04 22:07:52","created_at":"2025-11-04 22:07:52","updated_at":"2025-11-04 22:07:52","revisions":[],"cover":"","category":"informatique","content":"# Créer son propre mini-framework PHP from scratch\n\nTout commence avec une idée simple : bâtir un système web **léger, modulaire et compréhensible**, sans dépendre d’un framework externe.\nUn **framework maison**, conçu pour gérer efficacement des **posts**, des **commentaires** et des **pièces jointes**, tout en respectant les principes de l’architecture **MVC**.\n\n### L’objectif\n\nDisposer d’une base claire et extensible, où chaque brique du système — du routeur aux modèles — reste transparente et entièrement maîtrisable.\n\n---\n\n## **La structure du projet**\n\nL’application s’organise autour d’une arborescence simple et logique.\n\nAu sommet, le dossier `public/` joue le rôle de **porte d’entrée** du site, avec un fichier `index.php` qui orchestre tout : c’est lui qui intercepte chaque requête et la transmet au **routeur**.\n\nDans le dossier `app/`, on retrouve le cœur de la logique métier :\n\n* `Core/` contient les **fondations** : le routeur et la classe de base des contrôleurs.\n* `Controllers/` regroupe les différentes logiques d’action (posts, commentaires, pièces jointes).\n* `Models/` gère la **persistance des données** — ici stockées dans des fichiers JSON pour plus de simplicité.\n\nChaque couche a un rôle précis, et l’ensemble reste clair, modulaire et facile à maintenir.\n\n---\n\n## **Le routeur : le cerveau du système**\n\nAu cœur du projet, le fichier `Router.php` agit comme un **chef d’orchestre**.\nIl écoute les requêtes entrantes, analyse leur méthode (`GET`, `POST`, `PATCH`, etc.) et les fait correspondre à la bonne route.\n\nGrâce à un jeu de **regex**, le routeur reconnaît des chemins dynamiques comme `/posts/:id` et transmet automatiquement les paramètres au contrôleur concerné.\nUne architecture élégante, minimaliste et pourtant très puissante.\n\n---\n\n## **L’entrée principale : `index.php`**\n\nTout commence dans `public/index.php`.\nAprès avoir chargé les classes nécessaires, on y définit les routes — une à une — comme les **règles d’un jeu**.\n\nChaque route associe une méthode HTTP à une action précise :\n\n* Afficher tous les posts\n* Créer un nouveau post\n* Mettre à jour, publier ou masquer un post\n* Ajouter un commentaire ou une pièce jointe\n\nUne fois toutes les routes enregistrées, le routeur **intercepte la requête HTTP réelle** et la redirige vers le bon contrôleur.\nC’est simple, direct et parfaitement lisible.\n\n---\n\n## **Les contrôleurs : la logique métier**\n\nPrenons `PostController` comme exemple.\nChaque méthode correspond à une **action concrète** du système : afficher la liste des posts, en créer un, le modifier, le publier ou le masquer.\n\nLes contrôleurs sont **stateless** : ils reçoivent les données, invoquent le modèle correspondant, puis renvoient une réponse JSON propre et explicite.\nAucune dépendance superflue, aucun artifice — le code parle de lui-même.\n\n---\n\n## **Les modèles : la mémoire du système**\n\nLes modèles (`Post`, `Comment`, `Attachment`) assurent la gestion des données.\nIci, les informations sont stockées dans des fichiers JSON — un choix volontairement simple, idéal pour le prototypage ou les petits projets.\n\nMais la structure est pensée pour pouvoir évoluer facilement vers une **base de données réelle** (MySQL, SQLite, etc.) via PDO.\nChaque modèle sait comment **lire, créer, modifier et sauvegarder** ses propres objets, garantissant ainsi une séparation claire des responsabilités.\n\n---\n\n## **Une API claire et RESTful**\n\nLes routes suivent une logique **RESTful**, simple et cohérente :\n\n```bash\nPATCH /posts/42/publish\nPATCH /posts/42/comments/17/hide\nPOST /posts/42/attachments\n```\n\nL’API est lisible, homogène et prête à être consommée par n’importe quel front-end — qu’il soit en Vue.js, React, ou même une interface HTML minimale.\n\n---\n\n## **Pourquoi cette approche séduit**\n\nCe mini-framework maison présente plusieurs atouts :\n\n* **Zéro dépendance externe** : tout est sous ton contrôle.\n* **Architecture claire et didactique** : parfaite pour comprendre la mécanique interne d’un framework.\n* **Routing dynamique et élégant** : les paramètres d’URL sont gérés naturellement.\n* **Extensibilité** : tu peux facilement ajouter l’authentification, des middlewares ou la validation des données.\n* **Légèreté** : un cœur minimal, mais robuste et fonctionnel.\n\n---\n\n## **Et après ?**\n\nLa prochaine étape : implémenter la **gestion complète des fichiers uploadés**, avec vérification du type MIME, stockage sécurisé dans `/uploads`, et possibilité de masquer les pièces jointes à la demande.\n\nPetit à petit, ton framework prend forme — un système MVC léger, propre et totalement maîtrisé.\nTu n’utilises plus un framework : tu **en construis un**.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]}