Heim >Backend-Entwicklung >PHP-Tutorial >Erstellen Sie Ihr eigenes PHP -Framework mit Symfony -Komponenten
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.
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
:
<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', ...);
.
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!