Heim > Backend-Entwicklung > PHP-Tutorial > Erstellen Sie Ihr eigenes PHP -Framework mit Symfony -Komponenten

Erstellen Sie Ihr eigenes PHP -Framework mit Symfony -Komponenten

Joseph Gordon-Levitt
Freigeben: 2025-02-19 10:00:16
Original
203 Leute haben es durchsucht

Dieses Tutorial zeigt, dass ein minimales PHP -Framework mit Symfony -Komponenten erstellt wird. Obwohl es nicht erschöpfend ist, deckt es die Kernelemente für eine funktionale Anwendung ab. Für tiefere Tauchgänge wenden Sie sich an die offizielle Symfony -Dokumentation.

Build your own PHP Framework with Symfony Components

Schlüsselkonzepte:

Dieses Tutorial nutzt Symfony -Komponenten, um ein flexibles Framework zu erstellen. Es verwendet HTTPFoundation zum Verwalten von HTTP -Anforderungen und -Tonantionen, wodurch Standard -PHP -Globale ersetzt werden. Die Routing -Komponente ermöglicht die dynamische URL -Handhabung, und die EventDispatcher -Komponente erleichtert die Modularität und Erweiterbarkeit der Modularität und Erweiterung über das Beobachtermuster. Schließlich rationalisiert die Httpkernel -Komponente die Verarbeitung und die Antwortgenerierung.

Projekt -Setup:

Beginnen Sie mit einer Basis -Datei index.php und installieren Sie die erforderlichen Komponenten mit Composer:

php composer.phar require symfony/http-foundation symfony/http-kernel symfony/routing symfony/event-dispatcher
Nach dem Login kopieren

httpfoundation:

httpfoundation enthält Request und Response Klassen. Anfangs könnte index.php so aussehen (mit Globalen):

switch($_SERVER['PATH_INFO']) {
    case '/': echo 'Home'; break;
    case '/about': echo 'About'; break;
    default: echo 'Not Found!';
}
Nach dem Login kopieren

Dies wird durch Verwendung von httpfoundation verbessert:

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();
Nach dem Login kopieren

httpkernel:

Erstellen Sie eine Core -Klassel (z. B. 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);
        }
    }
}
Nach dem Login kopieren

update index.php:

require 'lib/Framework/Core.php';
$request = Request::createFromGlobals();
$app = new Framework\Core();
$response = $app->handle($request);
$response->send();
Nach dem Login kopieren

Verbesserte Routing (Routing -Komponente):

Die Core -Kläufe wird mit einem Routing -System unter Verwendung der Routing -Komponente verbessert:

<?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]));
    }
}
Nach dem Login kopieren

Routen sind jetzt in index.php:

definiert
$app->map('/', function() { return new Response('Home'); });
$app->map('/about', function() { return new Response('About'); });
// ...
Nach dem Login kopieren

eventDispatcher:

Die EventDispatcher -Komponente fügt Ereignisbearbeitungsfunktionen hinzu. Fügen Sie der on -Klasse und einer fire -Klasse eine Core -Methode und eine RequestEvent -Methode hinzu. (Implementierungsdetails sind für die Kürze weggelassen, jedoch ähnlich dem Beispiel in der ursprünglichen Eingabe). Hörer können mit $app->on('request', ...);.

hinzugefügt werden

Dieses Framework bietet eine Grundlage für den Aufbau komplexerer Anwendungen mithilfe der Leistung und Flexibilität von Symfony. Denken Sie daran, die offizielle Symfony -Dokumentation für fortgeschrittenere Funktionen und Komponentendetails zu konsultieren.

Das obige ist der detaillierte Inhalt vonErstellen Sie Ihr eigenes PHP -Framework mit Symfony -Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage