Symfony Microframework

Einführung

Bevor wir uns mit Mikro-Frameworks beschäftigen, ist es wichtig zu verstehen, dass ein Framework eine vorgefertigte Softwarestruktur ist, die eine Reihe von Tools und Bibliotheken bereitstellt, um die Entwicklung von Softwareanwendungen zu erleichtern. Es umfasst in der Regel eine definierte Reihe von Regeln, Konventionen und bewährten Verfahren, die Entwicklern helfen, hochwertige, skalierbare Anwendungen effizient zu erstellen.

Frameworks können grob in zwei Arten eingeteilt werden: Full-Stack-Frameworks und Mikroframeworks.

Full-Stack-Frameworks bieten einen umfassenden Satz von Tools und Funktionen für den Aufbau komplexer, mehrschichtiger Anwendungen, während Mikroframeworks nur die notwendigen Grundlagen bieten, um leichtgewichtige, einzweckorientierte Anwendungen zu erstellen.

Mikroframeworks sind leichtgewichtig, schnell und einfach zu bedienen, was sie ideal für kleine Projekte oder Prototypen macht. Sie sind jedoch möglicherweise nicht für komplexe Anwendungen oder Projekte geeignet, die umfangreiche Funktionalität und Flexibilität erfordern.

Symfony MicroKernel

Symfony MicroKernel ist eine leichtgewichtige Version des Full-Stack Symfony Frameworks, das für die Entwicklung von Microservices und kleinen Anwendungen ausgelegt ist. Es bietet Entwicklern einen grundlegenden Satz von Komponenten und Tools, mit denen sie ein benutzerdefiniertes Framework erstellen können, das auf ihre spezifischen Anforderungen zugeschnitten ist.

Der MicroKernel-Ansatz basiert auf der Idee der "selektiven Abhängigkeitsinjektion", was bedeutet, dass nur die erforderlichen Komponenten geladen werden und somit der Overhead reduziert und die Leistung gesteigert wird. Es kann verwendet werden, um eine Symfony-Mikroframework-Anwendung zu erstellen.

Anforderungen

- PHP

- Composer

Installation

Zunächst müssen wir das Symfony-Framework-Bundle und die Symfony-Runtime-Bibliothek mit Composer installieren. Hier ist der Befehl, den Sie in Ihrem Terminal ausführen müssen:

composer require symfony/framework-bundle symfony/runtime

Das FrameworkBundle ist ein Bündel von Symfony-Komponenten, das eine Grundlage für Webanwendungen bietet, die mit Symfony gebaut werden, während symfony/runtime eine Bibliothek ist, die eine optimierte, eigenständige Laufzeitumgebung für Symfony-Anwendungen bereitstellt, die die MicroKernelTrait verwenden.

Symfony/runtime bietet eine automatische Ladefunktion, die der Einstiegspunkt unserer Anwendung sein wird.

Implementierung

Lassen Sie uns eine index.php-Datei im public Verzeichnis erstellen. In dieser Datei müssen wir zuerst die autoload-Datei aus der Laufzeitbibliothek einbeziehen, wie wir bereits erwähnt haben:

<?php require_once __DIR__.'/../vendor/autoload_runtime.php';

Die oben genannte Autoload erwartet, dass index.php eine Funktion zurückgibt. Innerhalb der Funktion haben wir Zugriff auf $context, einen Array-Parameter, der globale und Umgebungsvariablen enthält.

Die Funktion sollte eine Instanz von Symfony\Component\HttpKernel\Kernel zurückgeben.

use Symfony\Component\HttpKernel\Kernel; return static function( array $context ) { $env = $context[ 'APP_ENV' ]; $debug = $context[ 'APP_DEBUG' ]; return new class( $env, $debug) extends Kernel {}

Der Kernel erwartet von unserer Klasse, dass sie Folgendes definiert:

registerBundles: ist verantwortlich für die Registrierung aller Bundles, die in unserer Anwendung verwendet werden. In Symfony ist ein Bundle eine modulare Codeeinheit, die verwandte Funktionalitäten kapselt und es leicht macht, bestimmte Funktionen hinzuzufügen oder zu entfernen. Bundles werden normalerweise in der Datei config/bundles.php registriert, aber in unserem Fall werden wir die Bundles inline registrieren.

registerContainerConfiguration: wird verwendet, um Konfigurationsdateien zu registrieren, die Services/Bundles für den Service-Container definieren. Diese Konfigurationsdateien werden normalerweise in YAML- oder XML-Formaten im config/ Verzeichnis geschrieben.

Wir können das MicroKernelTrait verwenden, da es uns beide Methoden zur Verfügung stellt, und wir überschreiben registerBundles, um das Symfony FrameworkBundle zu registrieren:

return new class( $env, $debug) extends Kernel { use MicroKernelTrait; public function registerBundles(): iterable { yield new FrameworkBundle(); } }

Das FrameworkBundle benötigt lediglich ein Geheimnis. Dieses Geheimnis wird aus Sicherheitsgründen verwendet, z.B. zur Generierung von CSRF-Tokens. 

Wir müssen es mithilfe von configureContainer konfigurieren:

public function configureContainer( ContainerConfigurator $configurator ): void { $configurator->extension( 'framework', [ 'secret' => '123456789' ] ); }

Routen und Controller

An diesem Punkt haben wir eine funktionierende Symfony-Anwendung. Wir müssen nun beginnen, Routen und Controller zu erstellen. In unserem Fall definieren wir eine dynamische Route, die eine Nummer im Pfad erfordert:

public function configureRoutes( RoutingConfigurator $configurator ): void { $configurator->add( 'app_home', '/{number}' )->controller( [ $this, 'homeAction' ] ); } public function homeAction( int $number, Request $request ): Response { return new JsonResponse( [ 'success' => true, 'providedNumber' => $number ] ); }

Und das war's, starte jetzt ein PHP-Server und öffne deinen localhost/1234 im Browser.

php -S localhost:8000 -t public/

Öffnen Sie als Nächstes Ihren Browser und navigieren Sie zur URL „localhost:8000/1234“. Sie sollten die Nachricht sehen:

{ "success": true, "providedNumber": 1234 }