


Construisez votre propre cadre PHP avec des composants Symfony
Feb 19, 2025 am 10:00 AMCe tutoriel montre la construction d'un cadre PHP minimal à l'aide de composants Symfony. Bien qu'il ne soit pas exhaustif, il couvre les éléments principaux d'une application fonctionnelle. Pour des plongées plus profondes, consultez la documentation officielle de Symfony.
Concepts clés:
Ce tutoriel exploite les composants Symfony pour construire un cadre flexible. Il utilise HTTPFoundation pour gérer les demandes et les réponses HTTP, en remplaçant les globaux PHP standard. Le composant de routage permet la manipulation dynamique de l'URL et le composant EventDispatcher facilite la modularité et l'extensibilité via le motif d'observateur. Enfin, le composant httpkernel rationalise la génération de traitement de la demande et de réponse.
Configuration du projet:
Commencez par un fichier de base index.php
et installez les composants nécessaires à l'aide du compositeur:
php composer.phar require symfony/http-foundation symfony/http-kernel symfony/routing symfony/event-dispatcher
httpfoundation:
httpfoundation fournit des classes Request
et Response
. Initialement, index.php
pourrait ressembler à ceci (en utilisant des globaux):
switch($_SERVER['PATH_INFO']) { case '/': echo 'Home'; break; case '/about': echo 'About'; break; default: echo 'Not Found!'; }
Ceci est amélioré en utilisant httpfoundation:
require 'vendor/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response(); switch ($request->getPathInfo()) { case '/': $response->setContent('Home'); break; case '/about': $response->setContent('About'); break; default: $response->setContent('Not Found!')->setStatusCode(Response::HTTP_NOT_FOUND); } $response->send();
httpkernel:
Pour encapsuler la logique du framework, créez une classe Core
(par exemple, lib/Framework/Core.php
):
<?php namespace Framework; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; class Core implements HttpKernelInterface { public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { switch ($request->getPathInfo()) { case '/': return new Response('Home'); case '/about': return new Response('About'); default: return new Response('Not Found!', Response::HTTP_NOT_FOUND); } } }
Mise à jour index.php
:
require 'lib/Framework/Core.php'; $request = Request::createFromGlobals(); $app = new Framework\Core(); $response = $app->handle($request); $response->send();
Routing amélioré (composant de routage):
La classe Core
est améliorée avec un système de routage en utilisant le composant de routage:
<?php // ... (previous code) ... use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\Exception\ResourceNotFoundException; class Core implements HttpKernelInterface { protected $routes; public function __construct() { $this->routes = new RouteCollection(); } public function handle(Request $request) { $context = new RequestContext(); $context->fromRequest($request); $matcher = new UrlMatcher($this->routes, $context); try { $attributes = $matcher->match($request->getPathInfo()); $controller = $attributes['controller']; unset($attributes['controller']); return call_user_func_array($controller, $attributes); } catch (ResourceNotFoundException $e) { return new Response('Not Found!', Response::HTTP_NOT_FOUND); } } public function map($path, $controller) { $this->routes->add($path, new Route($path, ['controller' => $controller])); } }
Les routes sont désormais définies dans index.php
:
$app->map('/', function() { return new Response('Home'); }); $app->map('/about', function() { return new Response('About'); }); // ...
EventDispatcher:
Le composant EventDispatcher ajoute des capacités de gestion des événements. Ajoutez une méthode on
et une méthode A fire
à la classe Core
et une classe RequestEvent
. (Détails d'implémentation omis pour la concision, mais similaire à l'exemple de l'entrée d'origine). Les auditeurs peuvent être ajoutés en utilisant $app->on('request', ...);
.
Ce cadre fournit une base pour créer des applications plus complexes en utilisant la puissance et la flexibilité de Symfony. N'oubliez pas de consulter la documentation officielle de Symfony pour des fonctionnalités et des détails de composants plus avancés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel

Construisez une application React avec un Laravel Back End: Partie 2, React

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

12 meilleurs scripts de chat PHP sur Codecanyon

Annonce de l'enquête sur la situation en 2025 PHP
