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
Joseph Gordon-LevittOriginal
2025-02-19 10:00:16200Durchsuche

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:

<code class="language-bash">php composer.phar require symfony/http-foundation symfony/http-kernel symfony/routing symfony/event-dispatcher</code>

httpfoundation:

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

<code class="language-php">switch($_SERVER['PATH_INFO']) {
    case '/': echo 'Home'; break;
    case '/about': echo 'About'; break;
    default: echo 'Not Found!';
}</code>

Dies wird durch Verwendung von httpfoundation verbessert:

<code class="language-php">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();</code>

httpkernel:

Erstellen Sie eine Core -Klassel (z. B. lib/Framework/Core.php):

<code class="language-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);
        }
    }
}</code>

update index.php:

<code class="language-php">require 'lib/Framework/Core.php';
$request = Request::createFromGlobals();
$app = new Framework\Core();
$response = $app->handle($request);
$response->send();</code>

Verbesserte Routing (Routing -Komponente):

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

<code class="language-php"><?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]));
    }
}</code>

Routen sind jetzt in index.php:

definiert
<code class="language-php">$app->map('/', function() { return new Response('Home'); });
$app->map('/about', function() { return new Response('About'); });
// ...</code>

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!

Stellungnahme:
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