Créer framework PHP : Introduction

Design pattern MVC, architecture du framework, faisons le point sur les dossiers de notre framework.

Icône de calendrier
Avancé
10 chapitres

Design pattern MVC

Avant d’entamer l’écriture de notre framework, assurez-vous d’être à l’aise avec l’architecture MVC en PHP.

Architecture du framework

Il n’existe pas une seule et unique implémentation du design pattern MVC en PHP. Il n’y a pas une architecture type à respecter scrupuleusement, la seule règle étant de découper son code en dossiers et fichiers appliquant cette logique de séparation des modèles, vues et contrôleurs.

Des architectures MVC diverses, bien que divisées en dossiers et fichiers différents, se ressembleront toujours dans les grandes lignes.

Il existe d’ailleurs de nombreux frameworks PHP basés sur le modèle MVC comme Symfony ou encore Laravel, et ils ne l’implémentent pas tous deux de la même manière.

Nous allons voir ici une possibilité d’architecture pour implémenter notre framework PHP MVC maison. Nous nommerons ce framework Plugo.

Dossiers principaux

Créer dans le répertoire racine de votre serveur local (📁 htdocs ou 📁 www) un projet nommé Plugo. Créons dès maintenant 5 sous-dossiers à l’intérieur :

📁 plugo
├── 📁 config
├── 📁 lib
├── 📁 public
├── 📁 src
├── 📁 templates
└── 📄 readme.md

Ces sous-dossiers constituent les fondations de notre framework.

📁 config

Ce dossier regroupera la configuration du framework, en d’autres termes, des fichiers PHP contenant des informations essentielles au fonctionnement du framework (routes & identifiants de la BDD dans notre cas).

📁 lib

Ce dossier regroupera l’ensemble du code source du framework, c’est-à-dire les fichiers contenant les mécaniques globales. lib fait d’ailleurs référence à « library », notre framework étant une sorte de grosse librairie PHP.

📁 public

Ce dossier représentera la racine de notre serveur web. Le nom de domaine de notre site devra pointer vers lui et non vers le répertoire racine du site Plugo.

C’est principalement pour des raisons de sécurité que nous opérons de la sorte. De cette manière, nous sommes assurés que tous les fichiers qui ne sont pas dans le dossier 📁 public ne seront pas accessibles directement dans le navigateur. Ceci est très important car notre projet contiendra des fichiers confidentiels comme sa configuration et il est impératif d’éviter qu’un hacker puisse les afficher dans son navigateur.

Ce dossier contiendra également tous les fichiers destinés à nos visiteurs : images, feuilles CSS et scripts JavaScript, etc. C’est le seul répertoire qui devrait être accessible à nos visiteurs, d’où son nom : « public ».

📁 src

C’est ici que les utilisateurs du framework pourront développer leur logique métier (contrôleurs + modèles). Il s’agit du code source du projet créé via le framework (un blog, un réseau social, un e-commerce…).

📁 templates

C’est ici que les utilisateurs du framework pourront construire leurs templates HTML (layout + pages + partials).

README pour documenter

Un petit fichier 📄 readme.md ne fait jamais de mal, alors prenons l’habitude d’en mettre un !

Il pourrait idéalement contenir une petite notice d’utilisation du framework avec des liens vers la documentation.

Exploitation d’un Virtual Host

Nous avions évoqué que le dossier 📁 public jouait le rôle de racine de notre serveur web.

Notre mission à très court terme est de faire en sorte que notre projet (et donc par extension son domaine) pointe vers ce répertoire.

Pour cela nous allons créer un VirtualHost pour notre serveur Apache.

Je vais détailler la démarche avec WAMP. Si vous utilisez un environnement de développement variable, tel que MAMP, aucun souci le web regorge de ressources à ce sujet.

  1. Cliquer sur l’icône de WAMP dans la barre des tâches, puis sur Vos VirtualHosts > Gestion VirtualHost.
  2. Créer un VirtualHost en saisissant les champs suivants :
  • Nom du Virtual Host : plugo.local (création d’un nom de domaine local)
  • Chemin complet absolu - C:/wamp64/www/plugo/public (à adapter bien entendu avec votre environnement)
  1. Relancer Wamp ou juste les DNS (clic droit Icône wamp > Outils > Redémarrage DNS)

Le fichier 📄 C:\wamp\bin\apache\apache2.4.41\conf\extra\httpd-vhosts.conf a été mis à jour.

httpd-vhosts.conf
copié !
<VirtualHost *:80>
	ServerName plugo.local
	DocumentRoot "c:/wamp64/www/formations/plugo/public"
	<Directory  "c:/wamp64/www/formations/plugo/public/">
		Options +Indexes +Includes +FollowSymLinks +MultiViews
		AllowOverride All
		Require local
	</Directory>
</VirtualHost>

Quand vous accédez à votre site avec le domaine plugo.local, Apache va en fait se placer dans le dossier 📁 public.

En savoir plus sur les virtual hosts