Symfony - Komponenten
Wie bereits erwähnt, handelt es sich bei Symfony-Komponenten um eine eigenständige PHP-Bibliothek, die eine bestimmte Funktion bietet, die in jeder PHP-Anwendung verwendet werden kann. In jeder Version von Symfony werden nützliche neue Komponenten eingeführt. Derzeit enthält das Symfony-Framework mehr als 30 hochwertige Komponenten. In diesem Kapitel erfahren Sie mehr über die Verwendung von Symfony-Komponenten.
Installieren einer Symfony-Komponente
Symfony-Komponenten können einfach mit dem Composer-Befehl installiert werden. Der folgende generische Befehl kann zum Installieren einer beliebigen Symfony-Komponente verwendet werden.
cd /path/to/project/dir
composer require symfony/<component_name>
Lassen Sie uns eine einfache PHP-Anwendung erstellen und versuchen, diese zu installieren Filesystem Komponente.
Step 1 - Erstellen Sie einen Ordner für die Anwendung, filesystem-example
cd /path/to/dev/folder
mdkir filesystem-example
cd filesystem-example
Step 2 - Installieren Sie die Dateisystemkomponente mit dem folgenden Befehl.
composer require symfony/filesystem
Step 3 - Erstellen Sie eine Datei main.php und geben Sie den folgenden Code ein.
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
$fs = new Filesystem();
try {
$fs->mkdir('./sample-dir');
$fs->touch('./sample-dir/text.txt');
} catch (IOExceptionInterface $e) {
echo $e;
}
?>
Die erste Zeile ist sehr wichtig, in der alle erforderlichen Klassen aus allen mit dem Befehl Composer installierten Komponenten geladen werden. In den nächsten Zeilen wird die Dateisystemklasse verwendet.
Step 4 - Führen Sie die Anwendung mit dem folgenden Befehl aus, und es wird ein neuer Ordner erstellt sample-dir und eine Datei test.txt darunter.
php main.php
Details zu Symfony-Komponenten
Symfony bietet Komponenten, die von einfachen Funktionen wie Dateisystemen bis hin zu erweiterten Funktionen wie Ereignissen, Containertechnologie und Abhängigkeitsinjektion reichen. Informieren Sie uns in den folgenden Abschnitten nacheinander über alle Komponenten.
Dateisystem
Die Dateisystemkomponente bietet einen grundlegenden Systembefehl für Dateien und Verzeichnisse wie Dateierstellung, Ordnererstellung, Dateiexistenz usw. Die Dateisystemkomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/filesystem
Finder
Die Finder-Komponente bietet fließende Klassen zum Suchen von Dateien und Verzeichnissen in einem angegebenen Pfad. Es bietet eine einfache Möglichkeit, die Dateien in einem Pfad zu durchlaufen. Die Finder-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/finder
Konsole
Die Konsolenkomponente bietet verschiedene Optionen zum einfachen Erstellen von Befehlen, die in einem Terminal ausgeführt werden können. Symfony verwendet dieCommand Komponente umfassend, um verschiedene Funktionen wie das Erstellen einer neuen Anwendung, das Erstellen eines Bundles usw. bereitzustellen. Sogar der in PHP integrierte Webserver kann mit dem Befehl Symfony aufgerufen werden. php bin/console server:runwie im Installationsabschnitt zu sehen. DasConsole Die Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/console
Lassen Sie uns eine einfache Anwendung erstellen und einen Befehl erstellen. HelloCommand Verwendung der Console Komponente und rufen Sie es auf.
Step 1 - Erstellen Sie ein Projekt mit dem folgenden Befehl.
cd /path/to/project
composer require symfony/console
Step 2 - Erstellen Sie eine Datei main.php und geben Sie den folgenden Code an.
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Console\Application;
$app = new Application();
$app->run();
?>
Application class richtet die erforderlichen Funktionen einer Bare-Bone-Konsolenanwendung ein.
Step 3 - Führen Sie die Anwendung aus, php main.php, was das folgende Ergebnis ergibt.
Console Tool
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output,
2 for more verbose output and 3 for debug
Available commands:
help Displays help for a command
list Lists commands
Step 4 - Erstellen Sie eine Klasse namens HelloCommand Ausdehnung Command Klasse in der main.php selbst.
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class HelloCommand extends Command {
}
Die Anwendung verwendet die folgenden vier Klassen, die in verfügbar sind Command Komponente.
Command - Wird verwendet, um einen neuen Befehl zu erstellen
InputInterface - Dient zum Einstellen von Benutzereingaben
InputArgument - Wird verwendet, um Benutzereingaben abzurufen
OutputInterface - Dient zum Drucken der Ausgabe auf der Konsole
step 5 - Erstellen Sie eine Funktion configure() und legen Sie Namen, Beschreibung und Hilfetext fest.
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
}
step 6 - Erstellen Sie ein Eingabeargument, user für den Befehl und als obligatorisch festlegen.
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
->addArgument('name', InputArgument::REQUIRED, 'name of the user');
}
step 7 - Erstellen Sie eine Funktion execute() mit zwei Argumenten InputArgument und OutputArgument.
protected function execute(InputInterface $input, OutputInterface $output) {
}
step 8 - Verwenden InputArgument um die vom Benutzer eingegebenen Benutzerdaten abzurufen und mit auf die Konsole zu drucken OutputArgument.
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
$output->writeln('Hello, ' . $name);
}
step 9 - Registrieren Sie die HelloCommand in die Anwendung mit dem add Methode von Application Klasse.
$app->add(new HelloCommand());
Die vollständige Anwendung ist wie folgt.
<?php
require __DIR__ . '/vendor/autoload.php';
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class HelloCommand extends Command {
protected function configure() {
$this
->setName('app:hello')
->setDescription('Sample command, hello')
->setHelp('This command is a sample command')
->addArgument('name', InputArgument::REQUIRED, 'name of the user');
}
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
$output->writeln('Hello, ' . $name);
}
$app = new Application();
$app->add(new HelloCommand());
$app->run();
}
?>
Step 10 - Führen Sie nun die Anwendung mit dem folgenden Befehl aus und das Ergebnis ist wie erwartet Hello, Jon.
php main.php app:hello Jon
Symfony wird mit einer vorgefertigten Binärdatei geliefert console im bin-Verzeichnis einer Symfony-Webanwendung, mit der die Befehle in einer Anwendung aufgerufen werden können.
Prozess
Die Prozesskomponente bietet Optionen zum sicheren und effizienten Ausführen eines beliebigen Systembefehls in einem Unterprozess. Die Prozesskomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/process
ClassLoader
Die ClassLoader-Komponente bietet Implementierung für beide PSR-0 und PSR-4Klassenlader Standard. Es kann verwendet werden, um die Klassen automatisch zu laden. Es wird in naher Zukunft abgeschrieben. Composer-basierter Klassenlader wird dieser Komponente vorgezogen. Die ClassLoader-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/class-loader
PropertyAccess
Die PropertyAccess-Komponente bietet verschiedene Optionen zum Lesen und Schreiben von Objekt- und Array-Details mithilfe der Zeichenfolgennotation. Zum Beispiel ein ArrayProduct Mit Schlüssel price kann dynamisch mit zugegriffen werden [price] Zeichenfolge.
$product = array(
'name' => 'Cake'
'price' => 10
);
var priceObj = $propertyAccesserObj->getValue($product, '[price]');
Die PropertyAccess-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/property-access
PropertyInfo
Die PropertyInfo-Komponente ähnelt der PropertyAccess-Komponente, funktioniert jedoch nur mit PHP-Objekten und bietet viel mehr Funktionen.
class Product {
private $name = 'Cake';
private $price = 10;
public function getName() {
return $this->name;
}
public function getPrice() {
return $this->price;
}
}
$class = Product::class;
$properties = $propertyInfoObj->getProperties($class);
/*
Example Result
--------------
array(2) {
[0] => string(4) "name"
[1] => string(5) "price"
}
*/
Die PropertyInfo-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/property-info
EventDispatcher
Die EventDispatcher-Komponente bietet eine ereignisbasierte Programmierung in PHP. Es ermöglicht den Objekten, miteinander zu kommunizieren, indem Ereignisse ausgelöst und abgehört werden. Im Kapitel Ereignisse und Ereignis-Listener erfahren Sie, wie Sie Ereignisse erstellen und anhören.
Die EventDispatcher-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/event-dispatcher
Abhängigkeitsspritze
Die DependencyInjection-Komponente bietet einen einfachen und effizienten Mechanismus zum Erstellen eines Objekts mit seiner Abhängigkeit. Wenn ein Projekt wächst, enthält es viele Klassen mit starker Abhängigkeit, die korrekt behandelt werden müssen. Andernfalls schlägt das Projekt fehl. DependencyInjection bietet einen einfachen und robusten Container zur Behandlung der Abhängigkeit. Im Kapitel Service Container erfahren Sie mehr über die Container und das Konzept der Abhängigkeitsinjektion.
Die DependencyInjection-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/dependency-injection
Serializer
Die Serializer-Komponente bietet die Möglichkeit, ein PHP-Objekt in ein bestimmtes Format wie XML, JSON, Binär usw. zu konvertieren und es dann ohne Datenverlust wieder in ein Originalobjekt zu konvertieren.
Die Serializer-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/serializer
Konfig
Die Konfigurationskomponente bietet Optionen zum Laden, Analysieren, Lesen und Überprüfen von Konfigurationen vom Typ XML, YAML, PHP und ini. Es bietet verschiedene Optionen zum Laden von Konfigurationsdetails aus der Datenbank. Dies ist eine der wichtigen Komponenten, die für die übersichtliche und übersichtliche Konfiguration von Webanwendungen hilfreich sind. Die Konfigurationskomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/config
Ausdruckssprache
Die ExpessionLanguage-Komponente bietet eine vollwertige Ausdrucks-Engine. Ausdrücke sind einzeilig, um einen Wert zurückzugeben. Die Ausdrucks-Engine ermöglicht das einfache Kompilieren, Analysieren und Abrufen des Werts aus einem Ausdruck. Es ermöglicht die Verwendung eines oder mehrerer Ausdrücke in einer Konfigurationsumgebung (Datei) durch einen Nicht-PHP-Programmierer, beispielsweise einen Systemadministrator. Die ExpressionLanguage-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/expression-language
OptionsResolver
Die OptionsResolver-Komponente bietet eine Möglichkeit, das in unserem System verwendete Optionssystem zu validieren. Beispielsweise wird die Datenbankeinstellung in einem Array, einer Datenbankoption mit Host, Benutzername, Kennwort usw. als Schlüssel abgelegt. Sie müssen die Einträge überprüfen, bevor Sie eine Verbindung zu einer Datenbank herstellen können. OptionsResolver vereinfacht diese Aufgabe, indem eine einfache Klasse OptionsResolver und ein Methodenauflöser bereitgestellt werden, mit denen die Datenbankeinstellungen aufgelöst werden. Wenn ein Validierungsproblem vorliegt, wird es gemeldet.
$options = array(
'host' => '<db_host>',
'username' => '<db_user>',
'password' => '<db_password>',
);
$resolver = new OptionsResolver();
$resolver->setDefaults(array(
'host' => '<default_db_host>',
'username' => '<default_db_user>',
'password' => '<default_db_password>',
));
$resolved_options = $resolver->resolve($options);
Die OptionsResolver-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/options-resolver
Dotenv
Die Dotenv-Komponente bietet verschiedene Optionen zum Parsen von .env-Dateien und der darin definierten Variablen, über die zugegriffen werden kann getenv(), $_ENV, oder $_SERVER. Die Dotenv-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/dotenv
Zwischenspeicher
Cache-Komponente bietet eine erweiterte PSR-6Implementierung. Es kann verwendet werden, um unserer Webanwendung Cache-Funktionen hinzuzufügen. Da folgt esPSR-6Es ist einfach zu starten und kann anstelle einer anderen PSR-6-basierten Cache-Komponente verwendet werden. Die Cache-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/cache
Intl
Die Intl-Komponente ist die Ersatzbibliothek für die C Intl-Erweiterung. Die Intl-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/intl
Übersetzung
Die Übersetzungskomponente bietet verschiedene Optionen zur Internationalisierung unserer Anwendung. Normalerweise werden die Übersetzungsdetails verschiedener Sprachen in einer Datei gespeichert, eine Datei pro Sprache, und sie werden zur Laufzeit der Anwendung dynamisch geladen. Es gibt verschiedene Formate zum Schreiben einer Übersetzungsdatei. Die Übersetzungskomponente bietet verschiedene Optionen zum Laden eines beliebigen Formattyps, z. B. eine einfache PHP-Datei, CSV, INI, Json, Yaml, ICU-Ressourcendatei usw. Die Übersetzungskomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/translation
Arbeitsablauf
Die Workflow-Komponente bietet erweiterte Tools zum Verarbeiten einer Finite-State-Maschine. Durch die einfache und objektorientierte Bereitstellung dieser Funktionalität ermöglicht die Workflow-Komponente eine relativ einfache erweiterte Programmierung in PHP. Wir werden es im Kapitel Advanced Concept ausführlich erfahren.
Die Workflow-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/workflow
Yaml
Die Yaml-Komponente bietet eine Option, mit der das YAML-Dateiformat analysiert und in PHP-Arrays konvertiert wird. Es ist auch in der Lage, YAML-Dateien aus einfachen PHP-Array zu schreiben. Die Yaml-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/yaml
Ldap
Die Ldap-Komponente bietet PHP-Klassen, um eine Verbindung zu einem LDAP- oder Active Directory-Server herzustellen und den Benutzer dagegen zu authentifizieren. Es bietet eine Option zum Herstellen einer Verbindung zu einem Windows-Domänencontroller. Die Ldap-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/ldap
Debuggen
Die Debug-Komponente bietet verschiedene Optionen zum Aktivieren des Debuggens in einer PHP-Umgebung. Normalerweise ist das Debuggen von PHP-Code schwierig, aber die Debug-Komponente bietet einfache Klassen, um den Debugging-Prozess zu vereinfachen und ihn sauber und strukturiert zu gestalten. Die Debug-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/debug
Stoppuhr
Die Stoppuhr-Komponente bietet eine Stoppuhr-Klasse zum Profilieren unseres PHP-Codes. Eine einfache Verwendung ist wie folgt.
use Symfony\Component\Stopwatch\Stopwatch;
$stopwatch = new Stopwatch();
$stopwatch->start('somename');
// our code to profile
$profiled_data = $stopwatch->stop('somename');
echo $profiled_data->getPeriods()
Die Stoppuhrkomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/stopwatch
VarDumper
VarDumper-Komponente bietet bessere dump()Funktion. Fügen Sie einfach die VarDumper-Komponente hinzu und verwenden Sie die Dump-Funktion, um die verbesserte Funktionalität zu erhalten. Die VarDumper-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/var-dumper
BrowserKit
Die BrowserKit-Komponente bietet eine abstrakte Browser-Client-Oberfläche. Es kann verwendet werden, um Webanwendungen programmgesteuert zu testen. Beispielsweise kann es ein Formular anfordern, die Beispieldaten eingeben und es senden, um Probleme im Formular programmgesteuert zu finden. Die BrowserKit-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/browser-kit
PHPUnit Bridge
Die PHPUnit Bridge-Komponente bietet viele Optionen zur Verbesserung der PHPUnit-Testumgebung. Die PHPUnit Bridge-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/phpunit-bridge
Anlagegut
Die Asset-Komponente bietet eine allgemeine Asset-Behandlung in einer Webanwendung. Es generiert eine URL für die Assets wie CSS, HTML, JavaScript und führt auch die Versionspflege durch. Wir werden die Asset-Komponente im Kapitel View Engine im Detail überprüfen. Die Asset-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/asset
CssSelector
Die CssSelector-Komponente bietet eine Option zum Konvertieren von CSS-basierten Selektoren in XPath-Ausdrücke. Ein Webentwickler kennt den CSS-basierten Selectors-Ausdruck mehr als den XPath-Ausdruck. Der effizienteste Ausdruck zum Auffinden eines Elements in HTML- und XML-Dokumenten ist jedochXPath Expression.
Mit CssSelector kann der Entwickler den Ausdruck in CSS-Selektoren schreiben. Die Komponente konvertiert ihn jedoch vor der Ausführung in einen XPath-Ausdruck. Somit hat der Entwickler den Vorteil der Einfachheit der CSS-Selektoren und der Effizienz der XPath-Expression.
Die CssSelector-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/css-selector
DomCrawler
Die DomCrawler-Komponente bietet verschiedene Optionen zum Suchen des Elements in HTML- und XML-Dokumenten mithilfe des DOM-Konzepts. Es bietet auch die Möglichkeit, den XPath-Ausdruck zu verwenden, um ein Element zu finden. Die DomCrawler-Komponente kann zusammen mit der CssSelector-Komponente verwendet werden, um CSS-Selektoren anstelle des XPath-Ausdrucks zu verwenden. Die DomCrawler-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/dom-crawler
Bilden
Die Formularkomponente ermöglicht die einfache Erstellung von Formularen in einer Webanwendung. Wir werden die Formularprogrammierung im Kapitel Formular ausführlich lernen. Die Formularkomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/form
HttpFoundation
Die HttpFoundation-Komponente bietet eine objektorientierte Ebene für die HTTP-Spezifikation. Standardmäßig stellt PHP HTTP-Anforderungs- und Antwortdetails als Array-basiertes Objekt bereit, z$_GET, $_POST, $_FILES, $_SESSIONusw. HTTP-basierte Funktionen wie das Setzen eines Cookies können mit einer einfachen, einfachen alten Funktion ausgeführt werden setCookie(). HttpFoundation bietet alle HTTP-bezogenen Funktionen in einer kleinen Gruppe von Klassen wie Request, Response, RedirectResponse usw. Weitere Informationen zu diesen Klassen finden Sie in den späteren Kapiteln.
Die HttpFoundation-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/http-foundation
HttpKernel
Die HttpKernel-Komponente ist die Kernkomponente im Symfony-Web-Setup. Es bietet alle für eine Webanwendung erforderlichen Funktionen - vom Empfang derRequest Einwände gegen das Zurücksenden der ResponseObjekt. Die vollständige Architektur der Symfony-Webanwendung wird von HttpKernel bereitgestellt, wie in der Architektur eines Symfony-Webframeworks erläutert.
Die HttpKernel-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/http-kernel
Routing
Die Routing-Komponente ordnet die HTTP-Anforderung einem vordefinierten Satz von Konfigurationsvariablen zu. Das Routing entscheidet, welcher Teil unserer Anwendung eine Anfrage bearbeiten soll. Weitere Informationen zum Routing finden Sie im Kapitel Routing.
Die Routing-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/filesystem
Vorlagen
Die Vorlagenkomponente bietet die erforderliche Infrastruktur zum Aufbau eines effizienten Vorlagensystems. Symfony verwendet die Templating-Komponente für die Implementierung der View-Engine. Weitere Informationen zur Vorlagenkomponente finden Sie im Kapitel View Engine.
Die Vorlagenkomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/templating
Validator
Die Validator-Komponente bietet eine Implementierung von JSR-303 Bean Validation Specification. Es kann verwendet werden, um ein Formular in einer Webumgebung zu validieren. Weitere Informationen zu Validator finden Sie im Kapitel Validierung.
Die Validator-Komponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/validator
Sicherheit
Die Sicherheitskomponente bietet ein vollständiges Sicherheitssystem für unsere Webanwendung, sei es HTTP-Basisauthentifizierung, HTTP-Digest-Authentifizierung, interaktive formularbasierte Authentifizierung, X.509-Zertifizierungsanmeldung usw. Sie bietet auch einen Autorisierungsmechanismus basierend auf der Benutzerrolle über das integrierte ACL-System . Weitere Informationen finden Sie im Kapitel Advanced Concept.
Die Sicherheitskomponente kann mit dem folgenden Befehl installiert werden.
composer require symfony/security