Tout 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. Un **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**. ### L’objectif Disposer d’une base claire et extensible, où chaque brique du système — du routeur aux modèles — reste transparente et entièrement maîtrisable. --- ## **La structure du projet** L’application s’organise autour d’une arborescence simple et logique. Au 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**. Dans le dossier `app/`, on retrouve le cœur de la logique métier : * `Core/` contient les **fondations** : le routeur et la classe de base des contrôleurs. * `Controllers/` regroupe les différentes logiques d’action (posts, commentaires, pièces jointes). * `Models/` gère la **persistance des données** — ici stockées dans des fichiers JSON pour plus de simplicité. Chaque couche a un rôle précis, et l’ensemble reste clair, modulaire et facile à maintenir. --- ## **Le routeur : le cerveau du système** Au cœur du projet, le fichier `Router.php` agit comme un **chef d’orchestre**. Il écoute les requêtes entrantes, analyse leur méthode (`GET`, `POST`, `PATCH`, etc.) et les fait correspondre à la bonne route. Grâ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é. Une architecture élégante, minimaliste et pourtant très puissante. --- ## **L’entrée principale : `index.php`** Tout commence dans `public/index.php`. Après avoir chargé les classes nécessaires, on y définit les routes — une à une — comme les **règles d’un jeu**. Chaque route associe une méthode HTTP à une action précise : * Afficher tous les posts * Créer un nouveau post * Mettre à jour, publier ou masquer un post * Ajouter un commentaire ou une pièce jointe Une fois toutes les routes enregistrées, le routeur **intercepte la requête HTTP réelle** et la redirige vers le bon contrôleur. C’est simple, direct et parfaitement lisible. --- ## **Les contrôleurs : la logique métier** Prenons `PostController` comme exemple. Chaque 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. Les contrôleurs sont **stateless** : ils reçoivent les données, invoquent le modèle correspondant, puis renvoient une réponse JSON propre et explicite. Aucune dépendance superflue, aucun artifice — le code parle de lui-même. --- ## **Les modèles : la mémoire du système** Les modèles (`Post`, `Comment`, `Attachment`) assurent la gestion des données. Ici, les informations sont stockées dans des fichiers JSON — un choix volontairement simple, idéal pour le prototypage ou les petits projets. Mais la structure est pensée pour pouvoir évoluer facilement vers une **base de données réelle** (MySQL, SQLite, etc.) via PDO. Chaque modèle sait comment **lire, créer, modifier et sauvegarder** ses propres objets, garantissant ainsi une séparation claire des responsabilités. --- ## **Une API claire et RESTful** Les routes suivent une logique **RESTful**, simple et cohérente : ```bash PATCH /posts/42/publish PATCH /posts/42/comments/17/hide POST /posts/42/attachments ``` L’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. --- ## **Pourquoi cette approche séduit** Ce mini-framework maison présente plusieurs atouts : * **Zéro dépendance externe** : tout est sous ton contrôle. * **Architecture claire et didactique** : parfaite pour comprendre la mécanique interne d’un framework. * **Routing dynamique et élégant** : les paramètres d’URL sont gérés naturellement. * **Extensibilité** : tu peux facilement ajouter l’authentification, des middlewares ou la validation des données. * **Légèreté** : un cœur minimal, mais robuste et fonctionnel. --- ## **Et après ?** La 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. Petit à petit, ton framework prend forme — un système MVC léger, propre et totalement maîtrisé. Tu n’utilises plus un framework : tu **en construis un**.