


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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

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





AphpdependencyInjectionContaineeRisatool That ManageSclassDensences, améliorant le codemodularité, la testabilité et la participation.

PhpapplicationsCanBeoptimizedForsPeedAndFiciency: 1) AutoringOpCacheInphp.ini, 2) Utilisation de PreparedStatementswithpodOrdatabasequeries, 3) Remplacingloopswitray_filterandArray_Mapfordataprocessing, 4) Configurationnginxasareproxy, 5)

PhpemailvalidationInvolvesthestreps: 1) formatvalidationusinggularexpressionstochecktheemailformat; 2) dnsvalidationtoensethedomainhasavalidmxrecord; 3) smtpvalidation, themostthoroughMethod.

OPCODECACHINGSIGNIFICITIVEMENT ImproveSPhpperFormanceByCachingCompileDcode, ReduCingServerLoDoLan

La raison de l'utilisation de l'injection de dépendance (DI) est qu'elle favorise le couplage lache, la testabilité et la maintenabilité du code. 1) Utiliser le constructeur pour injecter les dépendances, 2) éviter d'utiliser les localisateurs de services, 3) Utiliser les conteneurs d'injection de dépendance pour gérer les dépendances, 4) Améliorer la testabilité par l'injection des dépendances, 5) évitez les dépendances de sur-injection, 6) Considérez l'impact des performances de DI.

La vérification du numéro de sécurité sociale est mise en ?uvre en PHP par des expressions régulières et une logique simple. 1) Utilisez des expressions régulières pour nettoyer l'entrée et supprimer les caractères non nucères. 2) Vérifiez si la longueur de la cha?ne est de 18 bits. 3) Calculez et vérifiez le bit de contr?le pour s'assurer qu'il correspond au dernier bit de l'entrée.

L'injection de dépendance (DI) améliore considérablement la testabilité du code PHP par des dépendances explicitement transitives. 1) Les classes de découplage en DI et les implémentations spécifiques rendent les tests et la maintenance plus flexibles. 2) Parmi les trois types, le constructeur injecte des dépendances d'expression explicites pour maintenir l'état cohérent. 3) Utilisez des conteneurs DI pour gérer les dépendances complexes pour améliorer la qualité du code et l'efficacité de développement.

Sélectionnez DependencyInjection (DI) Pour les grandes applications, le service de service convient aux petits projets ou prototypes. 1) DI améliore la testabilité et la modularité du code par injection de constructeur. 2) Servicelocator obtient des services par l'enregistrement du centre, ce qui est pratique mais peut entra?ner une augmentation du couplage du code.
