Maison développement back-end tutoriel php Construisez votre propre cadre PHP avec des composants Symfony

Construisez votre propre cadre PHP avec des composants Symfony

Feb 19, 2025 am 10:00 AM

Ce 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.

Build your own PHP Framework with Symfony Components

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
Copier après la connexion

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!';
}
Copier après la connexion

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();
Copier après la connexion

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);
        }
    }
}
Copier après la connexion

Mise à jour index.php:

require 'lib/Framework/Core.php';
$request = Request::createFromGlobals();
$app = new Framework\Core();
$response = $app->handle($request);
$response->send();
Copier après la connexion

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]));
    }
}
Copier après la connexion

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'); });
// ...
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

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

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

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

Introduction à l'API Instagram Introduction à l'API Instagram Mar 02, 2025 am 09:32 AM

Introduction à l'API Instagram

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

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 Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

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

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

12 meilleurs scripts de chat PHP sur Codecanyon

Annonce de l'enquête sur la situation en 2025 PHP Annonce de l'enquête sur la situation en 2025 PHP Mar 03, 2025 pm 04:20 PM

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

See all articles