Symfony Microframework

Introduction

Sur ce blog, je vais vous guider pour créer un micro-framework en utilisant Symfony. Avant de plonger dans les micro-frameworks, il est important de comprendre qu'un framework est une structure logicielle pré-construite qui fournit un ensemble d'outils pour faciliter le développement d'applications logicielles. Il comprend généralement un ensemble de règles, de conventions et de bonnes pratiques définies qui aident les développeurs à créer des applications évolutives et de haute qualité de manière efficace.

Les frameworks peuvent être largement catégorisés en deux types: les frameworks full-stack et les micro-frameworks.

Les frameworks full-stack fournissent un ensemble complet d'outils et de fonctionnalités pour construire des applications complexes, tandis que les micro-frameworks n'offrent que les éléments essentiels nécessaires pour construire des applications légères et mono-usage.

Les micro-frameworks sont légers, rapides et faciles à utiliser, ce qui les rend idéaux pour les petits projets ou les prototypes. Cependant.

Symfony MicroKernel

Symfony MicroKernel est une version légère du framework Symfony full-stack, conçue pour prendre en charge le développement de microservices et d'applications à petite échelle. Il fournit aux développeurs un ensemble de composants et d'outils de base, leur permettant de créer un framework personnalisé adapté à leurs besoins spécifiques.

L'approche MicroKernel est basée sur l'idée d'une "injection de dépendance sélective", ce qui signifie que seuls les composants requis sont chargés, réduisant les surcharges et augmentant les performances et peut être utilisée pour créer une application micro-framework Symfony.

Exigences

- PHP

- Composer

Installation

Tout d'abord, nous devons installer le bundle Symfony framework et la bibliothèque d'exécution Symfony en utilisant Composer. Voici la commande à exécuter dans votre terminal:

composer require symfony/framework-bundle symfony/runtime

FrameworkBundle est un bundle de composants Symfony qui fournit une base pour les applications web construites avec Symfony, tandis que symfony/runtime est une bibliothèque qui fournit un environnement d'exécution autonome simplifié pour les applications Symfony construites en utilisant le MicroKernelTrait.

Symfony/runtime fournit un autoload. qui sera le point d'entrée de notre application.

Implementation

Créons un fichier index.php dans le répertoire public. Dans ce fichier, nous exigeons d'abord le fichier autoload de runtime comme nous l'avons dit précédemment:

<?php require_once __DIR__.'/../vendor/autoload_runtime.php';

L'autoload ci-dessus s'attend à ce que index.php retourne une fonction, à l'intérieur de laquelle nous aurons accès au $context, un paramètre de tableau qui inclura des variables globales et d'environnement.

La fonction doit retourner une instance de Symfony\Component\HttpKernel\Kernel.

use Symfony\Component\HttpKernel\Kernel; return static function( array $context ) { $env = $context[ 'APP_ENV' ]; $debug = $context[ 'APP_DEBUG' ]; return new class( $env, $debug) extends Kernel {}

Le Kernel s'attend à ce que notre classe définisse :

registerBundles : est responsable de l'enregistrement de tous les bundles qui seront utilisés dans notre application. Dans Symfony, un bundle est une unité modulaire de code qui encapsule une fonctionnalité connexe, ce qui facilite l'ajout ou la suppression de fonctionnalités spécifiques. Les bundles sont généralement enregistrés dans le fichier config/bundles.php, mais dans notre cas, nous allons les enregistrer en ligne.

registerContainerConfiguration: utilisé pour enregistrer des fichiers de configuration qui définissent des services/bundles.php pour le conteneur de services. Ces fichiers de configuration sont généralement écrits dans des formats YAML ou XML et sont situés dans le répertoire config/.

Nous pouvons utiliser MicroKernelTrait car il nous fournit les deux méthodes, et nous surchargeons registerBundles pour enregistrer le bundle Symfony FrameworkBundle :

return new class( $env, $debug) extends Kernel { use MicroKernelTrait; public function registerBundles(): iterable { yield new FrameworkBundle(); } }

Le FrameworkBundle ne nécessite qu'un secret. Ce secret est utilisé pour des raisons de sécurité, comme la génération de jetons CSRF. Nous devons le configurer en utilisant la méthode configureContainer :

public function configureContainer( ContainerConfigurator $configurator ): void { $configurator->extension( 'framework', [ 'secret' => '123456789' ] ); }

Routes et Controllers

À ce stade, nous avons une application Symfony fonctionnelle. Nous devons commencer à créer des routes et des contrôleurs. Dans notre cas, nous allons définir une route dynamique qui nécessite un nombre dans le chemin:

public function configureRoutes( RoutingConfigurator $configurator ): void { $configurator->add( 'app_home', '/{number}' )->controller( [ $this, 'homeAction' ] ); } public function homeAction( int $number, Request $request ): Response { return new JsonResponse( [ 'success' => true, 'providedNumber' => $number ] ); }

Et voilà, il ne reste plus qu'à lancer un serveur PHP et accéder à l'URL "localhost/1234" pour tester notre microframework.

Pour lancer le serveur PHP, ouvrez votre terminal et exécutez la commande suivante :

php -S localhost:8000 -t public/

Ensuite, ouvrez votre navigateur et accédez à l'URL "localhost:8000/1234". Vous devriez voir s'afficher le message:

{ "success": true, "providedNumber": 1234 }