


Key Takeaways
- Die Symfony -Konsolenkomponente ermöglicht es Entwicklern, strukturierte und überprüfbare CLI -Befehle zu erstellen und verschiedene Tools für den Zeitpunkt zu erstellen, wenn Befehle komplexer werden.
- Die Frage Helfer in Symfony Console kann verwendet werden, um Informationen für die Ausführung von Befehlen interaktiv zu sammeln, sicherzustellen, dass Benutzereingaben gültig sind und bestimmte Kriterien erfüllen.
- Symfony Console bietet die Möglichkeit, tabellarische Daten über die Tabellenklasse anzuzeigen, die nützlich sein können, um strukturierte Daten anzuzeigen.
- Mit Symfony Console können Fortschrittsbalken implementiert werden, um Feedback zur Ausführung eines Befehls zu geben und eine Schätzung zu geben, wie lange ein Vorgang dauert.
- Die Symfony Console -Komponente ermöglicht die Anpassung des Befehlszeilenwerkzeugausgangs durch Färben und Styling und ermöglicht sogar die Erstellung von benutzerdefinierten Stilen mithilfe der OutputFormatterstyle -Klasse.
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!
Installation
<span>composer require symfony/console </span>
Wesentliche Informationen über Komponist finden Sie hier. Wenn Sie mit gut gestalteten isolierten PHP Kaufen Sie hier.
Erstellen Sie unseren Befehl
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 </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></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></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.
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></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></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.
Tabellen
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. .
Fortschrittsbalken
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 </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></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></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 unserer Fortschrittsleiste
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></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></span>
Es gibt noch viel mehr, um Fortschrittsbalken anzupassen - lesen Sie hier darüber.
einen Befehl in einem Befehl
aufrufenEine 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.
Farbe und Stil
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 </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></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></span>
Weitere Informationen zum Styling Die Ausgabe finden Sie hier.
summieren
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?
häufig gestellte Fragen (FAQs) zu Symfony Console
Was sind die wichtigsten Unterschiede zwischen Symfony-Konsole und anderen PHP-Konsolenanwendungen? Im Gegensatz zu anderen PHP-Konsolenanwendungen bietet Symfony Console einen strukturierten und objektorientierten Ansatz zum Aufbau von ClI-Anwendungen. Es bietet eine Reihe von Klassen, um Befehle zu definieren, Eingang und Ausgabe zu behandeln und den Lebenszyklus der Anwendung zu verwalten. Darüber hinaus unterstützt Symfony Console Farbformatierung, Fortschrittsbalken, Tabellen und andere erweiterte Konsolenfunktionen, die in anderen PHP -Konsolenanwendungen nicht häufig zu finden sind.
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 Helfer in der Symfony -Konsole verwenden? Sie können mit der Gethelper () -Methode des Befehls zugegriffen werden. Die Symfony-Konsole umfasst mehrere integrierte Helfer, z. > Symfony Console bietet die Befehlsklasse zum Testen von Befehlen. Mit der CommandTester -Klasse können Sie einen Befehl mit spezifischen Eingaben ausführen und die Ausgabe erfassen. Anschließend können Sie die Ausgabe ausmachen, um das Verhalten des Befehls zu überprüfen. Wenn während der Ausführung eines Befehls ein Fehler auftritt, können Sie eine Ausnahme auslegen. Symfony Console fängt die Ausnahme an und zeigt dem Benutzer eine Fehlermeldung an.
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 das Erscheinungsbild der Konsolenausgabe anpassen? der Konsolenausgabe. Sie können Farbcodes verwenden, um die Textfarbe, Formatcodes zu ändern, um den Textstil zu ändern, und Tags zum Erstellen von Abschnitten. Sie können auch die ProgressBar- und Tabellenklassen verwenden, um Fortschrittsbalken und Tabellen 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.
Wie kann ich die Symfony -Konsolenkomponente verwenden, um Aufgaben zu automatisieren? Aufgaben, indem Sie Befehle erstellen, die bestimmte Aufgaben ausführen und diese Befehle aus der Befehlszeile oder aus einem Skript ausführen. Sie können auch Befehle planen, die in bestimmten Intervallen mit einem Aufgabenplaner wie Cron ausgeführt werden sollen.
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!

Was noch beliebt ist, ist die Benutzerfreundlichkeit, die Flexibilität und ein starkes Ökosystem. 1) Benutzerfreundliche und einfache Syntax machen es zur ersten Wahl für Anfänger. 2) eng integriert in die Webentwicklung, eine hervorragende Interaktion mit HTTP -Anforderungen und Datenbank. 3) Das riesige Ökosystem bietet eine Fülle von Werkzeugen und Bibliotheken. 4) Active Community und Open Source Nature passen sie an neue Bedürfnisse und Technologietrends an.

PHP und Python sind beide Programmiersprachen auf hoher Ebene, die häufig für die Aufgaben der Webentwicklung, Datenverarbeitung und Automatisierung verwendet werden. 1.PHP wird häufig verwendet, um dynamische Websites und Content -Management -Systeme zu erstellen, während Python häufig zum Erstellen von Webrahmen und Datenwissenschaften verwendet wird. 2.PHP verwendet Echo, um Inhalte auszugeben, Python verwendet Print. 3. Beide unterstützen die objektorientierte Programmierung, aber die Syntax und die Schlüsselwörter sind unterschiedlich. 4. PHP unterstützt eine schwache Konvertierung, während Python strenger ist. 5. Die PHP -Leistungsoptimierung umfasst die Verwendung von Opcache und asynchrone Programmierung, während Python Cprofile und asynchrone Programmierungen verwendet.

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Dreamweaver CS6
Visuelle Webentwicklungstools

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen