Heim >Backend-Entwicklung >PHP-Tutorial >Neuanleitung Symfony Console - CLI Php für Uneingeweihte!
Kernpunkte
Dieser Artikel wurde am 24. Mai 2017 aktualisiert und bietet eine umfassendere Einführung in dieses wichtige moderne Tool.
"Konsolenkomponente vereinfacht das Erstellen einer schönen und überprüfbaren Befehlszeilenschnittstelle." Dies ist die Begrüßungsnachricht, die wir sehen, wenn wir die Seite Symfony Console Component Tools besuchen.
Als Softwareentwickler müssen wir häufig Befehlszeilen -Tools verwenden. Diese Tools sind nützlich, wenn wir eine Art sich wiederholende Aufgaben ausführen müssen (z. B. Daten migrieren, Importe ausführen oder Cron -Jobs erstellen).
Das Symfony Console Component Tool bietet uns ein einfaches Framework, um unsere eigenen Befehlszeilen -Tools zu erstellen.
Im Gegensatz zu vielen Komponenten in Symfony ist dies ein eigenständiges Paket, das von Laravels Handwerk und vielen anderen berühmten PHP -Paketen verwendet wird.
Um die Alternativen zur Symfony -Konsole zu erfahren, siehe unser Vergleichsartikel: Schlacht der PHP -Konsole!
Installation
<code class="language-bash">composer require symfony/console</code>Wichtige Informationen zum Komponisten finden Sie hier.
Erstellen Sie einen neuen Befehl
Um einen neuen Befehl zu erstellen, müssen wir sicherstellen, dass unsere Datei ausführbar ist. Lassen Sie uns dazu eine Konsolendatei im Projektstammverzeichnis erstellen. Diese Datei fungiert als unser Befehlsmanager.
Stellen Sie jetzt sicher, dass die Datei ausführbar ist.
<code class="language-bash">touch console</code>
Stellen Sie dann sicher, dass sich zu Beginn unserer Datei Shebang befindet. Shebang ist eine Abfolge von Zeichen (Daumenmarke, gefolgt von Ausrufezeichen), die am Anfang des Skripts erscheint. Wenn Shebang existiert, wechselt exec () in die ausführbare Datei, die nach dem Ausführen von Shebang angegeben wurde. In unserem Beispiel wird es als PHP -Skript ausgeführt.
<code class="language-bash">chmod 755 console</code>Lassen Sie uns nach
unsere Konsolenanwendung definieren. Die erste Iteration unseres Befehlsmanagers sieht folgendermaßen aus:
Schauen wir uns genauer an. Zuerst laden wir automatisch alle Abhängigkeiten und importieren dann das Anwendungspaket aus der Konsolenkomponente. Danach erstellen wir eine neue Instanz der Anwendung und führen sie aus.
<code class="language-php">#!/usr/bin/env php <?php require_once __DIR__ . '/vendor/autoload.php'; use Symfony\Component\Console\Application; $app = new Application(); $app->run();</code>
Wenn wir ./console
verwenden, um das Skript auszuführen, sollten wir die folgende Hilfe -Nachricht erhalten:
Dies liegt daran, dass wir noch keine Befehle registriert haben, und wir haben gerade ihr grundlegendes Framework erstellt.
Erstellen wir unser Skript und registrieren Sie es in unserem neu erstellten Befehlsmanager.
Für dieses spezielle Beispiel werden wir zwei einfache Befehle implementieren: einen für Hashing -Zeichenfolgen und die andere, um zu bestätigen, dass der Hash zur angegebenen Zeichenfolge gehört.
wir werden den /src
-Fordner unserer Hash.php -Klasse mit dem folgenden Inhalt platzieren:
<code class="language-bash">composer require symfony/console</code>
Es ist Zeit, unsere Befehle zu erstellen. Erstellen wir eine neue PHP -Datei namens HashCommand.php.
Diese Klasse erweitert die Befehlsklasse von Symfony und implementieren Sie Konfigurationsmethoden. Diese Methoden sind für unsere Befehle von entscheidender Bedeutung, weil sie den Befehlen sagen, wie sie aussehen und sich verhalten.
Der vonausgefüllte Befehl lautet wie folgt:
<code class="language-bash">touch console</code>
Im Abschnitt Konfiguration ist die SetName -Methode die Art und Weise, wie wir den Befehl aufrufen, setDescription ist die Beschreibung des Befehls, und Addargument ist die Anweisung, die wir erklären, dass der Befehl einen Parameter mit dem Namen Passwort akzeptiert und er erforderlich ist.
In dem Abschnitt Ausführen greifen wir über die Getargument -Funktion auf die Parameter zu und haben sie anschließend mit unserer Hash -Klasse. Schließlich verwenden wir die Schreibmethode von OutputInterface, um das Ergebnis auf den Bildschirm zu drucken.
Wenn wir unseren Befehl so ausführen, werden wir nichts sehen. Dies liegt daran, dass wir immer noch einen sehr wichtigen Schritt fehlen. Wir müssen unsere Befehle noch in der Konsole registrieren.
<code class="language-bash">chmod 755 console</code>
Nachdem Sie den Befehl in der Konsole registriert haben, führen wir ihn aus.
Wenn wir den Befehl ./console
erneut ausführen, können wir sehen, dass wir jetzt einen neuen Befehl registriert haben.
lass es uns ausführen:
<code class="language-php">#!/usr/bin/env php <?php require_once __DIR__ . '/vendor/autoload.php'; use Symfony\Component\Console\Application; $app = new Application(); $app->run();</code>
wir sehen das Endergebnis:
Hash ist das Ergebnis der Anwendung der PHP -Hash () -Methode auf eine SitePoint -Zeichenfolge.
Für die Hash -Bestätigungsfunktion werden wir dieselbe Methode anwenden, aber wir werden zwei Parameter anstelle von einem haben. Eine wird die Zeichenfolge sein, die bestätigt werden muss, und der andere wird der Hash -Wert sein, den wir überprüfen möchten.
Wir erstellen eine neue Befehlsdatei direkt neben der Hashcommand -Datei. Nennen wir es Bestätigkeitskommand.
<code class="language-php"><?php namespace Hash; class Hash { /** * 接收一个字符串密码并对其进行哈希处理。 * * @param string $password * @return string $hash */ public static function hash($password) { return password_hash($password, PASSWORD_DEFAULT); } /** * 验证哈希是否与给定的密码相对应 * * @param string $password * @param string $hash * @return boolean 如果哈希是从密码生成的 */ public static function checkHash($string, $hash) { if (password_verify($string, $hash)) { return true; } return false; } }</code>
Registrieren Sie den Befehl in der Konsole.
<code class="language-php"><?php namespace Hash; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Hash\Hash; class HashCommand extends Command { protected function configure() { $this->setName("Hash:Hash") ->setDescription("使用Bcrypt对给定字符串进行哈希处理。") ->addArgument('Password', InputArgument::REQUIRED, '你想要哈希什么?'); } protected function execute(InputInterface $input, OutputInterface $output) { $hash = new Hash(); $input = $input->getArgument('Password'); $result = $hash->hash($input); $output->writeln('你的密码哈希值:' . $result); } }</code>
testen
In Bezug auf das Testen bietet uns Symfony einige bequeme Werkzeuge. Die nützlichste ist die Befehlsklasse, da sie spezielle Eingangs- und Ausgabeklassen bereitstellt, um unsere Befehle ohne die Befehlszeile zu testen.
Verwenden wir die CommandTester -Klasse, um einen Test für unseren Befehl Hash: Hash zu implementieren.
Erstellen wir zuerst einen /src
Ordner auf dem gleichen Niveau wie unser. /tests
<code class="language-bash">composer require symfony/console</code>Wir laden unsere Befehle zuerst mit der Anwendungsklasse. Dann instanziieren wir einen neuen Kommando. Mit COMPORTTESTER können wir konfigurieren, wie wir unsere Befehle aufrufen möchten. Der letzte Schritt besteht darin, die Methode GetDisplay () zu verwenden, um das Ausführungsergebnis mit dem erwarteten Ergebnis zu vergleichen.
Die Methode
getDisplay () speichert das Ergebnis unserer Befehlsausführung, genau wie wir in der Befehlszeile sehen.
Schlussfolgerung
Wir haben gerade zwei verschiedene Befehle mit der Symfony -Konsolenkomponente erstellt. Wir sehen auch eine gute Möglichkeit, diese Befehle zu testen. Ich schlage vor, Sie betrachten die verschiedenen Optionen und Funktionen der Komponenten und geben uns im Kommentarbereich unten ein Feedback zu Ihrem Experiment.Möchten Sie weiter fortgeschrittene Tutorials auf Symfony Console auf SitePoint sehen? Bitte sagen Sie es uns!
Der gesamte Code, den wir in diesem Artikel geschrieben haben, finden Sie in GitHub.
Symfony Console FAQ. In diesem Befehl wird die Symfony Console -Komponente in Ihr Projekt heruntergeladen und installiert. composer require symfony/console
Wie erstelle ich einen neuen Befehl in Symfony Console?
Wie führe ich Befehle in Symfony Console aus?
gefolgt vom Namen des Befehls verwenden. Wenn Sie beispielsweise einen Befehl namens bin/console
haben, können Sie ihn mit dem folgenden Befehl ausführen: app:my-command
. bin/console app:my-command
Befehlsparameter und -optionen können in der Methode der Konfiguration der Befehlsklasse definiert werden. Sie können das Getargument- und GetOption -Methoden verwenden, um die Werte dieser Parameter und Optionen in der Ausführungsmethode abzurufen.
Symfony Console bietet verschiedene Möglichkeiten, die Ausgabe anzuzeigen. Sie können mit der WriteLN -Methode eine Textzeile anzeigen, die Schreibmethode verwenden, um Text anzuzeigen (keine Zeilenumbrüche am Ende) und die Tabellenmethode zur Anzeige der Tabelle.
Fehler können behandelt werden, indem Ausnahmen vergeben werden. Symfony Console fängt diese Ausnahmen an und zeigt eine Fehlermeldung an. Sie können auch die Exit -Methode verwenden, um die Ausführung des Befehls zu stoppen und den Exit -Code zurückzugeben.
Symfony Console bietet eine Befehlsklasse, mit der Befehle getestet werden können. Sie können diese Klasse verwenden, um Befehle mit spezifischen Parametern und Optionen auszuführen und den Ausgangs- und Beenden -Code zu gründen.
Im Symfony -Projekt können Sie das Skript bin/console
verwenden, um Befehle auszuführen. Sie können auch Ihre eigenen Befehle erstellen, indem Sie eine neue Klasse erstellen, die die SymfonyComponentConSolecommand -Klasse im Verzeichnis src/Command
erweitert.
Das obige ist der detaillierte Inhalt vonNeuanleitung Symfony Console - CLI Php für Uneingeweihte!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!