Quand on parle de développement PHP moderne, les frameworks les plus connus viennent souvent avec une valise pleine de fonctionnalités. Pratique dans certains projets, parfois un peu excessif pour une API, un microservice ou une application web ciblée. C’est précisément là que Slim Framework entre en scène.
Slim porte bien son nom : il est léger, rapide et ne cherche pas à décider à votre place de l’architecture complète de votre projet. Il fournit les briques essentielles pour recevoir une requête HTTP, l’analyser, exécuter votre logique métier et renvoyer une réponse. Le reste ? À vous de composer votre application comme un bon plat : les ingrédients sont là, mais personne ne vous impose la recette.
Dans ce guide, nous allons voir comment fonctionne Slim, pourquoi l’utiliser, comment créer une application avec Slim 4 et quelles bonnes pratiques adopter pour construire un projet PHP performant et maintenable.
Qu’est-ce que Slim Framework ?
Slim est un micro-framework PHP open source conçu pour développer des applications web et des API. Sa mission principale est simple : faciliter le traitement des requêtes HTTP et le routage vers le bon code.
Contrairement à un framework plus complet comme Symfony ou Laravel, Slim ne fournit pas nativement un ORM, un système d’administration, une gestion complète des utilisateurs ou une structure de projet imposée. Cette approche minimaliste permet de garder une application légère et de sélectionner uniquement les composants réellement nécessaires.
Slim s’appuie sur plusieurs standards PHP modernes, notamment :
-
PSR-7, qui définit une interface commune pour représenter les requêtes et réponses HTTP ;
-
PSR-15, consacré aux middlewares HTTP ;
-
PSR-17, qui concerne les fabriques de requêtes et de réponses ;
-
PSR-11, utilisé pour les conteneurs d’injection de dépendances.
Cette compatibilité rend Slim particulièrement intéressant pour les développeurs qui souhaitent assembler des bibliothèques PHP compatibles entre elles, sans se retrouver enfermés dans un écosystème unique.
Pourquoi choisir Slim pour une application PHP ?
Le premier avantage de Slim est sa légèreté. Une petite API n’a pas forcément besoin d’un énorme framework chargé de fonctionnalités qu’elle n’utilisera jamais. Avec Slim, le démarrage est rapide et l’empreinte du projet reste réduite.
Le framework est également apprécié pour sa courbe d’apprentissage. Si vous connaissez déjà PHP et le fonctionnement des requêtes HTTP, vous pouvez rapidement créer vos premières routes. Pas besoin de passer trois semaines à comprendre une architecture gigantesque avant d’afficher votre premier « Bonjour ».
Slim convient notamment aux projets suivants :
-
API REST pour une application mobile ou un site WordPress ;
-
microservices indépendants ;
-
back-office personnalisé ;
-
webhooks et endpoints destinés à des services tiers ;
-
applications web nécessitant un contrôle précis de l’architecture ;
-
prototypes rapides destinés à valider une idée.
Autre point fort : Slim est suffisamment flexible pour évoluer. Vous pouvez commencer avec quelques routes et ajouter progressivement une base de données, une authentification, une validation de formulaires ou un système de journalisation.
Les prérequis techniques
Pour utiliser Slim 4, il est recommandé de disposer d’une version récente de PHP compatible avec la version du framework installée. Vérifiez toujours les exigences officielles du paquet choisi, car elles peuvent évoluer avec les nouvelles versions de Slim et de ses dépendances.
Vous aurez également besoin de :
-
Composer, le gestionnaire de dépendances PHP ;
-
un serveur web comme Apache ou Nginx, ou le serveur intégré de PHP pour les tests ;
-
une base de données si votre application doit stocker des informations ;
-
un environnement local comme Docker, DDEV, Laravel Herd ou une installation PHP classique.
Composer est indispensable. Il permet d’installer Slim et de charger automatiquement ses classes. Pour l’installer dans un nouveau dossier, utilisez par exemple :
composer require slim/slim slim/psr7
Le paquet slim/psr7 fournit une implémentation compatible avec les standards HTTP utilisés par Slim. Vous pouvez ensuite ajouter d’autres dépendances selon les besoins du projet.
Créer une première application Slim
Commençons avec une structure très simple. Créez un fichier public/index.php. Le dossier public est généralement utilisé comme point d’entrée accessible depuis le navigateur. Les fichiers sensibles, comme les configurations ou les identifiants, restent ainsi en dehors de la racine publique.
Voici une première application Slim :
<?php
require __DIR__ . '/../vendor/autoload.php';
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response) {
$response->getBody()->write('Bienvenue sur mon application Slim');
return $response;
});
$app->run();
Le fonctionnement est volontairement lisible. Composer charge les dépendances, AppFactory crée l’application, puis la méthode get() associe une URL à une fonction. Enfin, run() démarre le traitement de la requête.
Pour tester cette application localement, vous pouvez lancer :
php -S localhost:8080 -t public
Rendez-vous ensuite sur http://localhost:8080. Si tout est correctement configuré, votre message s’affiche. Ce n’est pas encore Netflix, mais c’est déjà un serveur web fonctionnel.
Comprendre le routage Slim
Le routage consiste à associer une méthode HTTP et une URL à une action précise. Slim prend en charge les méthodes habituelles :
-
GETpour récupérer une ressource ; -
POSTpour créer une ressource ; -
PUTouPATCHpour la modifier ; -
DELETEpour la supprimer.
Voici quelques exemples :
$app->get('/articles', ArticleController::class . ':index');
$app->post('/articles', ArticleController::class . ':create');
$app->get('/articles/{id}', ArticleController::class . ':show');
$app->delete('/articles/{id}', ArticleController::class . ':delete');
Le segment {id} est un paramètre dynamique. Dans une route utilisant une fonction anonyme, vous pouvez le récupérer ainsi :
$app->get('/articles/{id}', function (Request $request, Response $response, array $args) {
$id = $args['id'];
$response->getBody()->write('Article numéro ' . $id);
return $response;
});
Pour éviter de transformer le fichier principal en grande liste de routes, regroupez-les dans plusieurs fichiers ou classes dédiées. Une organisation claire devient rapidement indispensable dès que le projet dépasse trois endpoints et demi.
Renvoyer du JSON avec Slim
Les applications Slim sont souvent utilisées pour créer des API. Il est donc essentiel de retourner des réponses JSON propres, avec le bon type MIME et un code HTTP cohérent.
Voici un exemple :
$app->get('/api/articles', function (Request $request, Response $response) {
$articles = [
['id' => 1, 'title' => 'Découvrir Slim'],
['id' => 2, 'title' => 'Créer une API PHP']
];
$payload = json_encode($articles);
$response->getBody()->write($payload);
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(200);
});
Dans une application réelle, pensez à gérer les erreurs d’encodage JSON et à utiliser des codes HTTP adaptés. Une ressource créée pourra renvoyer un code 201, une ressource introuvable un code 404 et une requête invalide un code 400. Les codes HTTP ne sont pas décoratifs : ils permettent au client de comprendre rapidement ce qui s’est passé.
Les middlewares : le système nerveux de Slim
Un middleware intervient pendant le traitement d’une requête. Il peut modifier la requête, inspecter la réponse, vérifier une authentification, ajouter des en-têtes ou journaliser une opération.
Imaginez un contrôle de sécurité à l’entrée d’un bâtiment. Le visiteur arrive, le contrôle vérifie son badge, puis le laisse poursuivre vers le bon bureau. Un middleware fonctionne de manière assez similaire.
Exemple simple :
$app->add(function (Request $request, RequestHandler $handler): Response {
$response = $handler->handle($request);
return $response->withHeader('X-Powered-By', 'Slim');
});
Vous pouvez utiliser des middlewares pour :
-
gérer les autorisations et les rôles ;
-
activer ou contrôler le partage de ressources entre origines, aussi appelé CORS ;
-
mesurer le temps d’exécution des requêtes ;
-
centraliser la gestion des exceptions ;
-
ajouter des en-têtes de sécurité ;
-
charger un contexte utilisateur depuis un jeton d’authentification.
L’ordre d’ajout des middlewares compte. Un middleware d’authentification placé après une route protégée ne pourra pas jouer correctement son rôle. C’est un peu comme installer la serrure après avoir remis les clés aux visiteurs.
Organiser proprement un projet Slim
Slim ne vous impose pas d’architecture stricte. Cette liberté est agréable, mais elle demande de la discipline. Une structure courante peut ressembler à ceci :
-
public/: point d’entrée de l’application ; -
src/: contrôleurs, services et logique métier ; -
config/: fichiers de configuration ; -
routes/: définition des routes ; -
templates/: vues si l’application produit du HTML ; -
tests/: tests automatisés ; -
var/: journaux ou fichiers temporaires, selon les besoins.
Évitez de placer toutes les requêtes SQL, les règles métier et le rendu HTML dans une seule fonction de route. Cela fonctionne pour une démonstration, puis devient rapidement difficile à maintenir. Les contrôleurs doivent rester relativement fins et déléguer le travail à des services spécialisés.
Un contrôleur reçoit une requête et prépare une réponse. Un service applique une règle métier. Un dépôt ou repository communique avec la base de données. Cette séparation rend le code plus facile à tester et à faire évoluer.
Ajouter une base de données
Slim ne fournit pas de couche d’accès aux données intégrée. C’est volontaire : vous pouvez choisir PDO, Doctrine DBAL, Eloquent ou une autre solution compatible avec votre projet.
Avec PDO, utilisez toujours des requêtes préparées :
$statement = $pdo->prepare('SELECT * FROM articles WHERE id = :id');
$statement->execute(['id' => $id]);
$article = $statement->fetch();
Cette précaution réduit fortement les risques d’injection SQL. Les données envoyées par un utilisateur ne doivent jamais être concaténées directement dans une requête. Même si votre formulaire semble parfaitement innocent, Internet a parfois l’imagination d’un scénariste de série noire.
La connexion à la base de données doit être centralisée et injectée dans les services qui en ont besoin. Évitez de créer une nouvelle connexion à chaque route : vous compliqueriez les tests et gaspilleriez des ressources.
Injection de dépendances et conteneur
Quand l’application grandit, les contrôleurs et services ont besoin de plusieurs dépendances : connexion à la base de données, logger, client HTTP ou gestionnaire de configuration. Un conteneur d’injection de dépendances permet de créer et de fournir ces objets proprement.
Slim peut fonctionner avec différents conteneurs compatibles PSR-11. Vous pouvez par exemple utiliser PHP-DI, très répandu dans l’écosystème PHP :
composer require php-di/php-di
L’objectif n’est pas de cacher toute la création d’objets derrière une usine mystérieuse. Il s’agit plutôt de centraliser la configuration et d’éviter les dépendances codées en dur. Un service doit pouvoir recevoir ce dont il a besoin sans connaître toute l’architecture de l’application.
Performance et sécurité : les bons réflexes
Slim est rapide par nature, mais un framework léger ne rend pas automatiquement une application performante. Les choix effectués autour de lui ont une grande importance.
-
Activez l’opcache en production afin d’éviter de recompiler les scripts PHP à chaque requête.
-
Utilisez un serveur web correctement configuré avec PHP-FPM.
-
Optimisez les requêtes SQL et ajoutez des index lorsque cela est pertinent.
-
Limitez les données retournées par vos endpoints.
-
Mettez en cache les informations rarement modifiées.
-
Ne laissez jamais les erreurs détaillées visibles en production.
-
Stockez les secrets dans des variables d’environnement et non dans Git.
-
Validez et nettoyez systématiquement les données reçues.
-
Ajoutez des en-têtes de sécurité adaptés.
-
Maintenez PHP, Slim et les dépendances à jour.
Pour une API publique, pensez également à limiter le nombre de requêtes par adresse IP ou par utilisateur. Le rate limiting évite qu’un endpoint coûteux soit appelé des milliers de fois en quelques secondes.
Tester et maintenir une application Slim
La simplicité de Slim facilite les tests automatisés. Vous pouvez tester les services indépendamment, puis simuler des requêtes HTTP pour vérifier le comportement des routes.
PHPUnit est un choix courant pour les tests unitaires. Pour les tests fonctionnels, l’idée consiste à créer une requête, à l’envoyer à l’application et à vérifier le statut, les en-têtes et le contenu de la réponse.
Testez au minimum :
-
les réponses attendues pour chaque route importante ;
-
les paramètres invalides ;
-
les ressources inexistantes ;
-
les accès non authentifiés ;
-
les erreurs de connexion à la base de données ;
-
les permissions selon les profils utilisateurs.
Ajoutez aussi un outil d’analyse du code comme PHPStan ou Psalm. Ces outils détectent de nombreux problèmes avant même l’exécution de l’application. Un peu comme un correcteur orthographique, mais pour les bugs qui portent parfois un costume trois pièces.
Slim ou un framework plus complet ?
Slim est un excellent choix lorsque vous cherchez une base légère, flexible et orientée API. Il est particulièrement adapté aux équipes qui savent sélectionner leurs dépendances et qui souhaitent garder la main sur l’architecture.
En revanche, un framework plus complet pourra être préférable si votre projet nécessite immédiatement :
-
un ORM intégré et très riche ;
-
un système d’authentification prêt à l’emploi ;
-
des migrations de base de données intégrées ;
-
un moteur de templates et une structure imposée ;
-
un back-office ou un écosystème de modules très vaste.
Le meilleur framework n’est pas celui qui possède le plus de fonctionnalités. C’est celui qui correspond au besoin réel du projet, aux compétences de l’équipe et à la durée de vie prévue de l’application.
Un choix pertinent pour les développeurs PHP
Slim Framework offre une base solide pour créer des applications web et des API performantes en PHP. Son approche minimaliste, son respect des standards PSR et sa grande flexibilité en font un outil particulièrement intéressant pour les projets modernes.
Pour réussir votre application, concentrez-vous sur une architecture claire, des routes bien organisées, des middlewares maîtrisés et une validation rigoureuse des données. Ajoutez une stratégie de tests, surveillez les performances et évitez de transformer votre fichier index.php en tiroir fourre-tout.
Bien utilisé, Slim ne se contente pas d’être rapide à installer. Il vous aide surtout à construire une application qui reste compréhensible lorsque le projet prend de l’ampleur. Et en développement, un code que l’on comprend encore six mois plus tard mérite déjà une belle médaille.