Dieser Artikel wurde von Wern Ancheta Peer überprüft. Vielen Dank an alle Peer -Rezensenten von SitePoint, die SitePoint -Inhalte so gut wie möglich gemacht haben!
Es ist unbestreitbar, wie nützliche Konsolenbefehle bei der Entwicklung von Software sein können. Vor nicht allzu langer Zeit haben wir die Symfony-Konsolenkomponente neu eingerichtet.
Mit dieser Komponente können wir strukturierte und überprüfbare CLI -Befehle erstellen. Wir haben einige einfache Befehle erstellt und getestet; Aber wenn unsere Befehle größer und komplexer werden, brauchen wir einen anderen Satz von Tools.
Das werden wir uns heute ansehen: Advanced Symfony Console Tools.
Erstellen wir einen Befehl, mit dem wir einige dieser Funktionen anzeigen können. Der größte Teil der grundlegenden Funktionalität wurde in der Wiedereinführung in den Artikel von Symfony Console gezeigt. Überprüfen Sie sie also vor dem Vorrücken-es ist eine schnelle, aber nützliche Lektüre!
<span>composer require symfony/console </span>
Wesentliche Informationen über Komponist finden Sie hier. Wenn Sie mit gut gestalteten isolierten PHP Kaufen Sie hier.
Erstellen wir einen Befehl für einen Favoriten aller Zeiten: Fizzbuzz.
fizzbuzz ist ein einfaches Problem, das häufig in Programmierinterviews verwendet wird, um die Programmierkompetenz des Befragten geltend zu machen. Die Definition von Fizzbuzz kommt normalerweise in der folgenden Form:
Schreiben Sie ein Programm, das die Zahlen von 1 bis x druckt. Aber für mehrfache von drei Drucken „Fizz“ anstelle der Anzahl und für die Vielfachen von fünf Druck „Buzz“. Drucken Sie für Zahlen „Fizzbuzz“.
Unser Befehl erhält ein Argument, das für Fizzbuzz die obere Grenze sein wird.
Erstellen wir unsere Fizzbuzz -Klasse.
<span>composer require symfony/console </span>
ziemlich einfach. Die FirstNFizzBuzz () -Methode druckt die Ergebnisse von Fizzbuzz für einen $ maxValue von Zahlen. Dies geschieht, indem die Methode calculateFizzbuzz () rekursiv aufgerufen wird.
Schreiben wir als nächstes unseren Befehl. Erstellen Sie eine fizzcommand.php -Datei mit den folgenden Inhalten:
<span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue <= $maxValue){ </span></span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span>
und schließlich unsere Konsolendatei.
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span>
Hier erstellen wir eine neue Konsolenanwendung und registrieren unsere Fizzcommand () in sie. Vergessen Sie nicht, diese Datei ausführbar zu machen.
Wir können jetzt überprüfen, ob unser Befehl korrekt registriert ist, indem Sie den Befehl ./console ausführen. Wir können unseren Befehl auch mit ./console fizzbuzz: fizzbuzz 25 ausführen. Dies berechnet und drucken die Fizzbuzz -Ergebnisse von 1 bis 25.
Bis jetzt haben wir nichts Neues getan. Aber es gibt ein paar Möglichkeiten, wie wir unseren Befehl verbessern können. Zunächst ist der Befehl nicht sehr intuitiv. Woher wissen wir, dass wir die Grenze an den Befehl übergeben müssen? Dafür bietet uns die Symfony -Konsole die Frage Helfer.
Die Frage Helper bietet Funktionen, um den Benutzer um weitere Informationen zu bitten. Auf diese Weise können wir interaktiv Informationen für die Ausführung unserer Befehle sammeln.
Lassen Sie uns unseren Befehl ändern, anstatt eine Ausführungsgrenze über die Ausführungsaufforderung für Befehl zu empfangen, den Benutzer nach einer Grenze fordern. Dafür hat die Frage Helper eine einzige Methode: sfr. (). Diese Methode empfängt als Argumente ein InputInterface, eine Ausgabeinterface und eine Frage.
ändern wir die fizzcommand.php -Datei, sodass sie so aussieht:
#!/usr/bin/env php <span><span><?php </span></span><span> </span><span><span>require_once __DIR__ . '/vendor/autoload.php'; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Application</span>; </span></span><span><span>use FizzBuzz<span>\FizzCommand</span>; </span></span><span> </span><span><span>$app = new Application(); </span></span><span><span>$app->add(new FizzCommand()); </span></span><span><span>$app->run(); </span></span>
Wir erwarten kein Argument mehr auf der Methode configure (). Wir instanziieren eine neue Frage mit einem Standard von 25 und verwenden sie für die ASK () -Methode, über die wir zuvor gesprochen haben.
Jetzt haben wir einen interaktiven Befehl, der nach einem Limit fragt, bevor wir Fizzbuzz ausführen.
Die Frage Helfer gibt uns auch Funktionen, um die Antworten zu validieren. Verwenden wir es also, um sicherzustellen, dass die Grenze eine Ganzzahl ist.
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span><span>use Symfony<span>\Component\Console\Question\Question</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz"); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> </span><span> <span>$helper = $this->getHelper('question'); </span></span><span> <span>$question = new Question('Please select a limit for this execution: ', 25); </span></span><span> <span>$limit = $helper->ask($input, $output, $question); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($limit); </span></span><span> <span>} </span></span><span><span>} </span></span>
Wir stellen nicht nur sicher, dass unsere Grenze eine Ganzzahl durch die Verwendung der Funktion SetValidator () ist, sondern auch die Eingabe normalisieren, falls der Benutzer einige leere Räume einfügt und auch die maximale Anzahl von Versuchen festlegen, die zwei zulässig sind.
Die Frage Helper bietet viel mehr Funktionen wie den Benutzer aus einer Liste von Antworten, mehreren Antworten, der Versteckung der Benutzerantwort und der Autocompletion. Die offizielle Dokumentation hat viel mehr Informationen dazu.
Eine weitere sehr nützliche Funktion der Konsolenkomponente ist die Möglichkeit, tabellarische Daten anzuzeigen.
Um eine Tabelle anzuzeigen, müssen wir die Tabellenklasse verwenden. Stellen Sie die Header und Zeilen ein und rendern Sie schließlich den Tisch. Dies kann sehr nützlich sein, wenn es darum geht, strukturierte Daten anzuzeigen. Stellen wir uns vor, wir möchten einen Befehl erstellen, um die Conversions für einige metrische Systeme anzuzeigen.
Fügen wir unserer neuen PHP -Datei metricscommand.php hinzu.
<span>protected function execute(InputInterface $input, OutputInterface $output){ </span> <span>$fizzy = new FizzBuzz(); </span> <span>$helper = $this->getHelper('question'); </span> <span>$question = new Question('Please select a limit for this execution: ', 25); </span> <span>$question->setValidator(function ($answer) { </span> <span>if (!is_numeric($answer)) { </span> <span>throw new <span>\RuntimeException</span>('The limit should be an integer.'); </span> <span>} </span> <span>return $answer; </span> <span>}); </span> <span>$question->setNormalizer(function ($value) { </span> <span>return $value ? trim($value) : ''; </span> <span>}); </span> <span>$question->setMaxAttempts(2); </span> <span>$limit = $helper->ask($input, $output, $question); </span> <span>$result = $fizzy->firstNFizzbuzz($limit); </span> <span>} </span>
und unsere neue Konsolendatei:
<span>composer require symfony/console </span>
Es ist ein sehr einfacher Befehl: Es macht eine Tabelle mit einigen Werten, die von Zoll zu Zentimetern konvertiert werden. Wenn wir unseren Befehl mit ./console Metriken ausführen, wird das Ergebnis ungefähr so sein:
Die Tabellenklasse bietet uns auch verschiedene Separatorstile für unsere Tabellen. Überprüfen Sie diese Seite, wenn Sie mehr wissen möchten. .
Während Fragen und Tabellen sehr nützlich sein können, könnte das wichtigste Element die Fortschrittsleiste sein. Fortschrittsbalken geben uns Feedback zur Ausführung des Befehls und ermöglichen es uns, eine klare Übersicht darüber zu haben, wie lange wir auf eine Operation warten müssen.
Fortschrittsbalken sind für längere laufende Befehle unerlässlich. Um sie zu verwenden, benötigen wir die ProgressBar, geben Sie eine Gesamtzahl von Einheiten (wenn wir tatsächlich wissen, wie viele Einheiten wir erwarten) und fördern Sie sie, wie der Befehl ausführt.
Ein einfacher Befehl mit einer Fortschrittsleiste kann so aussehen:
<span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue <= $maxValue){ </span></span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span>
und die jeweilige Konsole:
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span>
Dies ist ein sehr einfacher Befehl. Wir richten die Balken und Schleifen durch eine Sleep () -Funktion. Die endgültige Ausgabe sieht so aus:
Weitere Informationen zu Fortschrittsbalken finden Sie in der offiziellen Dokumentation.
Anpassen von Fortschrittsbalken können nützlich sein, um zusätzliche Informationen bereitzustellen, während der Benutzer wartet.
standardmäßig hängt die in der Fortschrittsleiste gezeigten Informationen von der Ausführungsstufe der Ausgabeinterface -Instanz ab. Wenn wir also unterschiedliche Informationsebenen anzeigen möchten, können wir die Methode setFormat () verwenden.
#!/usr/bin/env php <span><span><?php </span></span><span> </span><span><span>require_once __DIR__ . '/vendor/autoload.php'; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Application</span>; </span></span><span><span>use FizzBuzz<span>\FizzCommand</span>; </span></span><span> </span><span><span>$app = new Application(); </span></span><span><span>$app->add(new FizzCommand()); </span></span><span><span>$app->run(); </span></span>
Die integrierten Formate sind: Normal, ausführlich, sehr_verbose und Debuggen.
Wenn wir zum Beispiel das normale Format verwenden, sieht das Ergebnis so aus:
Wir können auch unser eigenes Format festlegen.
Die Fortschrittsleiste ist eine Zeichenfolge, die sich aus verschiedenen spezifischen Platzhaltern zusammensetzt. Wir können diese spezifischen Platzhalter kombinieren, um unsere eigenen Fortschrittsbalken zu schaffen. Die verfügbaren Platzhalter sind: aktuell, max, bar, Prozent, verstrichen, verbleibend, geschätzt, Speicher und Nachricht. Wenn wir also beispielsweise dieselbe Standard -Fortschrittsleiste kopieren wollten, könnten wir Folgendes verwenden:
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span><span>use Symfony<span>\Component\Console\Question\Question</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz"); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> </span><span> <span>$helper = $this->getHelper('question'); </span></span><span> <span>$question = new Question('Please select a limit for this execution: ', 25); </span></span><span> <span>$limit = $helper->ask($input, $output, $question); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($limit); </span></span><span> <span>} </span></span><span><span>} </span></span>
Es gibt noch viel mehr, um Fortschrittsbalken anzupassen - lesen Sie hier darüber.
Eine weitere sehr nützliche Funktion ist die Möglichkeit, einen Befehl in einem Befehl auszuführen. Zum Beispiel könnten wir einen Befehl haben, der von einem anderen Befehl abhängt, um erfolgreich auszuführen, oder eine Folge von Befehlen, die wir vielleicht in einer Sequenz ausführen möchten.
Stellen Sie sich zum Beispiel vor, wir wollten einen Befehl erstellen, um unseren Befehl fizzbuzz auszuführen. Wir müssten einen neuen Befehl in unserem /src -Ordner und in der Methode execute () erstellen, haben die folgenden:
<span>composer require symfony/console </span>
Da unser Befehl fizzbuzz keine Argumente erhält, würde dies ausreichen. Für den Fall, dass unser Befehl Argumente benötigte, müssten wir eine Reihe von Argumenten erstellen und die ArrayInput -Klasse verwenden, um sie zu übergeben.
Abgesehen davon geht es darum, die Methode Find () mit unserem Befehlsnamen zu verwenden, um unseren Befehl zu finden und zu registrieren.
Färben und Styling Die Ausgabe kann nützlich sein, um den Benutzer über etwas in der Ausführung des Befehls aufmerksam zu machen oder zu informieren. Dafür müssen wir nur die folgenden Tags zu unserer Writeln () -Methode hinzufügen, genau wie folgt:
<span><span><?php </span></span><span><span>declare(strict_types=1); </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>class Fizzbuzz{ </span></span><span> </span><span> <span>public function isFizz(int $value): bool{ </span></span><span> <span>if($value % 3 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function isBuzz(int $value): bool{ </span></span><span> <span>if($value % 5 === 0){ </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>return false; </span></span><span> <span>} </span></span><span> </span><span> <span>public function calculateFizzBuzz(int $number): bool{ </span></span><span> <span>if($this->isFizz($number) && $this->isBuzz($number)){ </span></span><span> <span>echo "FizzBuzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isFizz($number)){ </span></span><span> <span>echo "Fizz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>if($this->isBuzz($number)){ </span></span><span> <span>echo "Buzz \n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> <span>echo $number . "\n"; </span></span><span> <span>return true; </span></span><span> <span>} </span></span><span> </span><span> <span>public function firstNFizzbuzz(int $maxValue): void{ </span></span><span> <span>$startValue = 1; </span></span><span> </span><span> <span>while($startValue <= $maxValue){ </span></span><span> <span>$this->calculateFizzBuzz($startValue); </span></span><span> <span>$startValue++; </span></span><span> <span>} </span></span><span> <span>} </span></span><span><span>} </span></span>
Es besteht auch die Möglichkeit, unsere eigenen Stile mithilfe der OutputFormatterstyle -Klasse zu definieren:
<span><span><?php </span></span><span> </span><span><span>namespace FizzBuzz; </span></span><span> </span><span><span>use Symfony<span>\Component\Console\Command\Command</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Output\OutputInterface</span>; </span></span><span><span>use Symfony<span>\Component\Console\Input\InputArgument</span>; </span></span><span> </span><span><span>use FizzBuzz<span>\Fizzbuzz</span>; </span></span><span> </span><span><span>class FizzCommand extends Command{ </span></span><span> </span><span> <span>protected function configure(){ </span></span><span> <span>$this->setName("FizzBuzz:FizzBuzz") </span></span><span> <span>->setDescription("Runs Fizzbuzz") </span></span><span> <span>->addArgument('Limit', InputArgument<span>::</span>REQUIRED, 'What is the limit you wish for Fizzbuzz?'); </span></span><span> <span>} </span></span><span> </span><span> <span>protected function execute(InputInterface $input, OutputInterface $output){ </span></span><span> </span><span> <span>$fizzy = new FizzBuzz(); </span></span><span> <span>$input = $input->getArgument('Limit'); </span></span><span> </span><span> <span>$result = $fizzy->firstNFizzbuzz($input); </span></span><span> <span>} </span></span><span> </span><span><span>} </span></span>
Weitere Informationen zum Styling Die Ausgabe finden Sie hier.
vom Styling bis hin zu Helfern haben wir eine Menge Funktionen gesehen, die die Symfony -Konsole außerhalb der Schachtel bietet. Nach heute gibt es absolut keine Entschuldigung, schlecht dokumentierte Befehlszeilen -Tools zu haben!
Welche Helfer und Komponenten der Konsole verwenden Sie häufig? Wie starten Sie Ihre CLI -Tools? Ist die Symfony -Konsole für Sie ausreichend oder bevorzugen Sie eine Alternative?
Wie kann ich einen benutzerdefinierten Befehl in Symfony Console erstellen?
Erstellen eines benutzerdefinierten Befehls in Symfony Console beinhaltet die Erweiterung der Befehlsklasse und die Implementierung der Methoden configure () und execute (). Die Methode configure () wird verwendet, um den Befehlsnamen, die Argumente und die Optionen zu definieren, während die Methode execute () die Logik des Befehls enthält. Sobald die Befehlsklasse erstellt wurde, kann sie mit der Methode add () zur Anwendung hinzugefügt werden. Ausgabeinterface, um Eingang und Ausgabe in einem Befehl zu verarbeiten. Das InputInterface enthält Methoden, um die Befehlsargumente und -optionen zu erhalten, während das Ausgabeinterface Methoden zum Schreiben in die Konsole bietet. Sie können auch das InputArgument- und Inputoption -Klassen verwenden, um die Befehlsargumente und -optionen zu definieren.Wie kann ich die Symfony Console -Komponente außerhalb des Symfony -Frameworks verwenden? Dies bedeutet, dass es außerhalb des Symfony -Frameworks verwendet werden kann. Sie können es mit Composer installieren und es verwenden, um CLI -Anwendungen in jedem PHP -Projekt zu erstellen.
Wie kann ich eine Konsolenanwendung mit mehreren Befehlen erstellen? Fügen Sie der Anwendung mehrere Befehlsklassen hinzu. Jede Befehlsklasse sollte die Befehlsklasse erweitern und die Methoden configure () und execute () implementieren. Sie können dann die Methode add () der Anwendung verwenden, um die Befehle hinzuzufügen.
Das obige ist der detaillierte Inhalt vonSymfony -Konsole jenseits der Grundlagen - Helfer und andere Tools. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!