Files
varlog/_cache/articles/8ed45b6e-d89b-4ae9-94e2-ed8476c00080.json
T
2026-05-15 10:37:48 +02:00

1 line
5.3 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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 dun 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 larchitecture **MVC**.\n\n### Lobjectif\n\nDisposer dune 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\nLapplication sorganise autour dune arborescence simple et logique.\n\nAu sommet, le dossier `public/` joue le rôle de **porte dentrée** du site, avec un fichier `index.php` qui orchestre tout : cest 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 daction (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 lensemble 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 dorchestre**.\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## **Lentré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 dun 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.\nCest 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\nLAPI est lisible, homogène et prête à être consommée par nimporte quel front-end — quil 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 dun framework.\n* **Routing dynamique et élégant** : les paramètres dURL sont gérés naturellement.\n* **Extensibilité** : tu peux facilement ajouter lauthentification, 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 nutilises plus un framework : tu **en construis un**.\n","featured":false,"files_meta":[],"external_links":[],"tags":[]}