Deux raisons de ne pas utiliser PHP
En tant que développeur PHP, je me souviens encore de l'époque du PHP4, de la première implémentation GC (optionnelle !) dans le PHP5, et j'ai vécu la _hype_ de l'avènement du PHP7 et...
Cet article a été créé dans le but de vous présenter les trucs et astuces les plus utiles et les plus récupérables concernant le développement de la console Symfony.
Si vous êtes un PHP développeur qui souhaite apporter votre PHP développement de logiciels Cet article est fait pour vous. Sans plus attendre, entrons dans le vif du sujet.
On l'entend souvent :
PHP est uniquement utilisé pour créer des pages web
C'est totalement faux, car aujourd'hui Développement PHP est utilisé dans de nombreux domaines d'activité, souvent peu banals à première vue.
Les deux PHP et son environnement supportent parfaitement la communication HTTP qui, avec l'utilisation de l'environnement CLI, permet de créer rapidement des robots web, des crawlers web ou des outils qui synchronisent des données dans des environnements externes.
À l'appui de cette affirmation, je dispose de quelques statistiques qui montrent que la composante "console" de la Cadre Symfonyqui permet un accès facile à la ligne de commande, est dans le TOP5 des logiciels les plus utilisés et téléchargés. Symfony de tous les temps.
A ce stade, nous aimerions partager avec vous quelques astuces que tout le monde peut utiliser. Développeur PHP à connaître lors de la rédaction code en PHP qui est censé fonctionner dans l'interface de programmation.
Le rendu des tableaux avec la possibilité de choisir des entrées peut être réalisé de manière simple à l'aide de Symfony Commandement :
// src/App/Command/TestCommand.php
protected function execute(InputInterface $input, OutputInterface $output) : int
{
$io = new SymfonyStyle($input, $output) ;
$io->title("Exemple de table de sélection interactive") ;
$table = $io->createTable() ;
$table->setHeaderTitle("Exemple de tableau de sélection interactif") ;
$table->setRows(iterator_to_array($this->tagsTableRows())) ;
$table->render() ;
$io->newLine() ;
return Commande::SUCCESS ;
}
Dans l'exemple ci-dessus, nous tirons parti de Générateurs PHP comme source de données - ce qui permet d'améliorer l'évolutivité à l'avenir. Générateur de données simple pour l'exemple ci-dessus :
protected function tagsTableRows() : Générateur
{
$apiTagsResponse = $this->someInjectedService->getTags() ;
foreach ($apiTagsResponse as $apiTagResponse) {
yield [ $apiTagResponse->getName(), $apiTagResponse->getId() ] ;
}
}
Le résultat final est un tableau rendu en CLI.
Pour le rendre interactif, nous devons utiliser QuestionHelper, fourni comme une enveloppe autour de SymfonyStyle
de la production.
(...)
$choice = new ChoiceQuestion(
question : "Quelle sélection choisissez-vous ?",
choices : array_reduce(
array : $rows,
callback : function($carry, $item) {
$carry[] = $item[0] ;
return $carry ;
}
)
) ;
$answer = $io->askQuestion($choice) ;
(...)
Nous obtenons ainsi un champ de choix interactif avec un affichage sous forme de tableau à partir de la même source.
Masquer l'invite tout en fournissant des données sensibles est une pratique courante et facilement réalisable en Symfony Console.
Vous pouvez utiliser le wrapper intégré dans SymfonyStyle
dans l'exemple suivant :
(...)
protected function execute(InputInterface $input, OutputInterface $output) : int
{
$io = new SymfonyStyle($input, $output) ;
$io->title("Demander des données sensibles à l'utilisateur") ;
$io->askHidden(
question : "Fournissez votre clé API ici",
validator : function($answer) { return (42 == strlen($answer)) ? ? $answer ; }
) ;
return Command::SUCCESS ;
}
Pour communiquer des progrès à l'utilisateur, nous pouvons utiliser des barres de progression. Symfony La console est un excellent moyen de montrer la progression à l'utilisateur, mais n'oubliez pas de styliser correctement votre sortie de progression. Vous pouvez avoir un contrôle total sur les différentes parties et la façon dont elles sont rendues en utilisant Formateur
. Le format de la barre de progression n'est qu'une chaîne de différents espaces réservés. Les espaces réservés disponibles sont les suivants : actuel
, max
, bar
, pour cent
, écoulé
, restant
, estimée
, mémoire
et message
. Jouez avec eux à l'aide de l'exemple ci-dessous.
(...)
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;
}
Vous pouvez utiliser à peu près n'importe quoi comme formateur tant que votre terminal est capable de l'afficher. Le formatage officiel Symfony la documentation
Nous sommes habitués aux suggestions de la console, aux fonctions d'autocomplétion, etc. dans notre vie de développeur. Si vous créez une application console, vous devriez envisager de l'ajouter afin que vos utilisateurs ne soient pas désorientés sur la façon d'utiliser votre solution CLI de bas niveau. PHP Symfony Console peut également fournir cela, dès le départ, en utilisant la fonction Entrée d'achèvement
classe.
(...)
public function complete(CompletionInput $input, CompletionSuggestions $suggestions) : void
{
if ($input->mustSuggestArgumentValuesFor(argumentName : 'someArgument')) {
$suggestions->suggestValues(['someSuggestion', 'otherSuggestion']) ;
}
}
Symfony 5.1 a introduit une nouvelle façon de gérer la position du curseur dans les applications CLI. Depuis lors, il est possible de lire et d'écrire à un endroit précis de l'écran en utilisant la fonction pratique Curseur
classe :
(...)
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;
}
Cette courte liste d'astuces n'est que la partie émergée de l'iceberg. Les possibilités de Console Symfony sont innombrables, comme en témoignent les nombreux projets tels que Psalm, PHPStan ou Composer qui sont basés sur les PHP et utilisés par des millions de Développeurs PHP dans le monde entier.