Zwei Gründe, warum Sie PHP nicht verwenden sollten
Als PHP-Entwickler erinnere ich mich noch an die Tage von PHP4, die erste (optionale!) GC-Implementierung in PHP5, und ich erlebte den _Hype_ um die Einführung von PHP7 und...
Dieser Artikel wurde mit dem Ziel erstellt, Ihnen die nützlichsten und abrufbarsten Tipps und Tricks über Symfony Console Development zu zeigen.
Wenn Sie ein PHP Entwickler die Ihr Unternehmen zu einem PHP Software-Entwicklung auf die nächste Stufe zu heben, ist dieser Artikel genau das Richtige für Sie. Kommen wir ohne Umschweife zur Sache.
Das hört man oft:
PHP wird nur zur Erstellung von Webseiten verwendet
Das ist völlig unwahr, denn heutzutage PHP Entwicklung wird in vielen verschiedenen Geschäftsbereichen eingesetzt, die auf den ersten Blick oft nicht so trivial sind.
Sowohl die PHP Sprache und ihre Umgebung unterstützen perfekt die HTTP-Kommunikation, was zusammen mit der Verwendung der CLI-Umgebung die schnelle Erstellung von Web-Bots, Web-Crawlern oder Tools ermöglicht, die Daten in externen Umgebungen synchronisieren.
Um dies zu untermauern, habe ich einige Statistiken, die zeigen, dass die Konsolenkomponente der Symfony-Frameworkdas einen einfachen Zugriff auf die Kommandozeile ermöglicht, gehört zu den TOP5 der meistgenutzten und heruntergeladenen Symfony Pakete aller Zeiten.
An dieser Stelle möchten wir Ihnen ein paar Tricks verraten, die jeder PHP Entwickler beim Schreiben wissen sollten Code in PHP die in der CLI funktionieren soll.
Das Rendering von Tabellen mit der Möglichkeit, Einträge auszuwählen, kann auf einfache Weise erreicht werden durch Symfony Befehl:
// src/App/Befehl/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Beispiel für eine interaktive Auswahltabelle");
$table = $io->createTable();
$table->setHeaderTitle("Beispiel für eine interaktive Auswahltabelle");
$table->setRows(iterator_to_array($this->tagsTableRows()));
$able->render();
$io->newLine();
return Befehl::SUCCESS;
}
Im obigen Beispiel nutzen wir die Vorteile von PHP-Generatoren als Datenquelle - das hilft bei der Skalierbarkeit in der Zukunft. Einfacher Datengenerator für obiges Beispiel:
protected function tagsTableRows(): Generator
{
$apiTagsResponse = $this->someInjectedService->getTags();
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ];
}
}
Das Endergebnis ist eine in CLI gerenderte Tabelle.
Um es interaktiv zu machen, müssen wir QuestionHelper verwenden, der als Wrapper um SymfonyStil
Ausgabe.
(...)
$choice = new ChoiceQuestion(
question: 'Welche Auswahl treffen Sie?',
choices: array_reduce(
array: $rows,
callback: function($carry, $item) {
$carry[] = $item[0];
return $carry;
}
)
);
$answer = $io->askQuestion($choice);
(...)
Als Ergebnis erhalten wir ein interaktives Auswahlfeld mit einer Tabellenanzeige aus derselben Quelle.
Das Verstecken der Eingabeaufforderung bei gleichzeitiger Bereitstellung sensibler Daten ist eine gängige Praxis und kann auch in Symfony Konsole.
Sie können den eingebauten Wrapper in SymfonyStil
Klasse anhand des folgenden Beispiels:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Abfrage des Benutzers nach sensiblen Daten");
$io->askHidden(
Frage: "Geben Sie hier Ihren API-Schlüssel an",
validator: function($answer) { return (42 == strlen($answer)) ?? 1TP60Antwort; }
);
return Befehl::ERFOLG;
}
Um dem Benutzer einen gewissen Fortschritt zu vermitteln, können wir Fortschrittsbalken verwenden. Symfony Die Konsole bietet eine großartige Möglichkeit, dem Benutzer den Fortschritt anzuzeigen, aber denken Sie immer daran, Ihre Fortschrittsausgabe richtig zu gestalten. Sie haben volle Kontrolle über die verschiedenen Teile und wie sie gerendert werden mit Formatierer
. Das Format des Fortschrittsbalkens besteht lediglich aus einer Reihe verschiedener Platzhalter. Die verfügbaren Platzhalter sind: aktuell
, max
, bar
, Prozent
, verstrichen
, verbleibende
, geschätzte
, Speicher
und Nachricht
. Probieren Sie sie anhand des folgenden Beispiels aus.
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Styled progress bar example");
$progressBar = new ProgressBar($io, 10000);
$progressBar->setFormat('<comment>%current%/%max% [%bar%] %percent:3s%%</comment>
<info>%elapsed:6s%/%estimated:-6s%</info> <error>%memory:6s%</error>');
$progressBar->start();
for ($i = 0; $i < 10000; $i++) {
$progressBar->advance();
usleep(420);
}
$progressBar->finish();
$io->newLine();
return Command::SUCCESS;
}
Sie können fast alles als Formatierer verwenden, solange Ihr Terminal in der Lage ist, es darzustellen. Offiziell Symfony Dokumentation
Wir sind in unserem Entwicklungsleben an Konsolenvorschläge, Autovervollständigungsfunktionen und dergleichen gewöhnt. Wenn Sie eine Konsolenanwendung erstellen, sollten Sie dies in Betracht ziehen, damit Ihre Benutzer nicht verwirrt sind, wie sie Ihre Low-Level-CLI-Lösung verwenden sollen. PHP Die Symfony Console kann auch das bieten, und zwar standardmäßig mit FertigstellungEingabe
Klasse.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void
{
if ($input->mustSuggestArgumentValuesFor(argumentName: 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']);
}
}
Symfony 5.1 wurde eine neue Art der Handhabung der Cursorposition in CLI-Anwendungen eingeführt. Seitdem ist es möglich, an einer bestimmten Stelle auf dem Bildschirm zu lesen und zu schreiben, indem man die praktische Cursor
Klasse:
(...)
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$io->title("Cursor example");
$cursor = new Cursor($io);
$cursor->clearScreen();
for ($x = 0; $x <= 10; $x++) {
for ($y = 0; $y <= 10; $y++) {
$cursor->moveToPosition($x, $y);
if ($y === $x) {
$io->write(".");
}
}
}
$io->write("Hello, World!");
$io->newLine();
return Command::SUCCESS;
}
Diese kurze Liste von Tricks ist nur die Spitze des Eisbergs. Die Möglichkeiten der Symfony-Konsole sind endlos, wie die zahlreichen Projekte wie Psalm, PHPStan oder Composer zeigen, die auf PHP und von Millionen von Menschen genutzt PHP Entwickler rund um die Welt.