


Réintroduire la console Symfony - CLI PHP pour les non-initiés!
Feb 10, 2025 pm 02:06 PM
Points de base
- Symfony Console est un package autonome qui fournit un cadre simple pour créer des outils de ligne de commande, qui est utile pour des taches répétitives telles que la migration des données, l'importation ou la création de travaux CRON.
- Pour créer une nouvelle commande, le fichier doit être exécutable. Cela peut être fait en créant un fichier de console dans le répertoire racine du projet, en garantissant que le fichier est exécutable et en définissant l'application de console.
- Vous pouvez utiliser la classe CommandSter de Symfony pour tester les commandes, qui fournit des classes d'entrée et de sortie spéciales pour tester les commandes sans la ligne de commande. La console Symfony
- est installée à l'aide de Composer (l'outil de gestion de la dépendance en PHP). Il fournit une API simple pour créer des commandes de ligne de commande et prend en charge les affichages de couleurs, les barres de progression, les tables et autres fonctionnalités interactives de la sortie.
Cet article a été mis à jour le 24 mai 2017 et fournit une introduction plus complète à cet outil moderne important.
"Le composant de la console simplifie le processus de création d'une interface de ligne de commande belle et testable." Ceci est le message de bienvenue que nous voyons lorsque nous visitons la page des outils de composants de la console Symfony.
En tant que développeurs de logiciels, nous devons souvent utiliser des outils de ligne de commande. Ces outils sont utiles lorsque nous devons effectuer une sorte de taches répétitives (telles que la migration des données, l'exécution des importations ou la création de travaux CRON).
L'outil de composant Console Symfony nous fournit un framework simple pour créer nos propres outils de ligne de commande.
Contrairement à de nombreux composants de Symfony, il s'agit d'un package autonome qui est utilisé par l'artisan de Laravel et de nombreux autres packages PHP célèbres.
Pour en savoir plus sur les alternatives à la console Symfony, voir notre article de comparaison: Battle of PHP Console!
Installation
composer require symfony/consoleDes informations importantes sur le compositeur sont incluses ici.
Créer une nouvelle commande
Pour créer une nouvelle commande, nous devons nous assurer que notre fichier est exécutable. Pour ce faire, créons un fichier de console dans le répertoire racine du projet. Ce fichier sera notre gestionnaire de commandement.
Maintenant, assurez-vous que le fichier est exécutable.
touch console
Ensuite, assurons qu'il y a Shebang au début de notre fichier. Shebang est une séquence de personnages (marque de pouce suivi de la marque d'exclamation) qui appara?t au début du script. Lorsque Shebang existe, EXEC () passera au fichier exécutable spécifié après l'exécution de Shebang. Dans notre exemple, il s'exécutera en tant que script PHP.
chmod 755 consoleAprès
, définissons notre application de console. La première itération de notre gestionnaire de commande ressemblera à ceci:
Regardons de plus près. Tout d'abord, nous chargeons automatiquement toutes les dépendances, puis importons le package d'application à partir du composant de la console. Après cela, nous créons une nouvelle instance d'application et l'exécutons.
#!/usr/bin/env php <?php require_once __DIR__ . '/vendor/autoload.php'; use Symfony\Component\Console\Application; $app = new Application(); $app->run();
Si nous utilisons ./console
pour exécuter le script, nous devons obtenir le message d'aide suivant:
C'est parce que nous n'avons pas encore enregistré de commandes, nous venons de construire leur cadre de base.
Créons notre script et inscrivons-le dans notre gestionnaire de commandes nouvellement créé.
Pour cet exemple spécifique, nous implémenterons deux commandes simples: l'une pour les cha?nes de hachage et l'autre pour confirmer que le hachage appartient à la cha?ne donnée.
Nous placerons le dossier /src
de notre classe Hash.php, avec le contenu suivant:
composer require symfony/console
Il est temps de créer nos commandes. Créons un nouveau fichier PHP appelé hashcommand.php.
Cette classe étendra la classe de commande de Symfony et implémentera les méthodes de configuration et d'exécution. Ces méthodes sont cruciales pour nos commandes car elles indiquent aux commandes à quoi elles ressemblent et se comportent.
La commande terminée parest la suivante:
touch console
Dans la section de configuration, la méthode setName est la fa?on dont nous appelons la commande, SetDescription est la description de la commande, et AddArgument est l'instruction que nous déclarons que la commande acceptera un paramètre nommé mot de passe, et il est nécessaire.
Dans la section Execute, nous accédons aux paramètres via la fonction GetArgument, puis les hachiez en utilisant notre classe de hachage. Enfin, nous utilisons la méthode WriteEln de OutputInterface pour imprimer le résultat à l'écran.
Si nous exécutons notre commande comme celle-ci, nous ne verrons rien qui se passe. C'est parce que nous manquons toujours une étape très importante. Nous devons encore enregistrer nos commandes dans la console.
chmod 755 console
Après avoir enregistré la commande dans la console, exécutons-la.
Si nous exécutons à nouveau la commande ./console
, nous pouvons voir que nous avons maintenant enregistré une nouvelle commande.
Exécutez-le:
#!/usr/bin/env php <?php require_once __DIR__ . '/vendor/autoload.php'; use Symfony\Component\Console\Application; $app = new Application(); $app->run();
Nous voyons le résultat final:
Hash est le résultat de l'application de la méthode PHP Hash () à une cha?ne SitePoint.
Pour la fonction de confirmation de hachage, nous utiliserons la même méthode, mais nous aurons deux paramètres au lieu d'un. L'un sera la cha?ne qui doit être confirmée, et l'autre sera la valeur de hachage que nous voulons vérifier.
Nous créerons un nouveau fichier de commande, juste à c?té du fichier HashCommand. Appelons cela ConfirmCommand.
<?php namespace Hash; class Hash { /** * 接收一個(gè)字符串密碼并對(duì)其進(jìn)行哈希處理。 * * @param string $password * @return string $hash */ public static function hash($password) { return password_hash($password, PASSWORD_DEFAULT); } /** * 驗(yàn)證哈希是否與給定的密碼相對(duì)應(yīng) * * @param string $password * @param string $hash * @return boolean 如果哈希是從密碼生成的 */ public static function checkHash($string, $hash) { if (password_verify($string, $hash)) { return true; } return false; } }
Ensuite, enregistrez la commande dans la console.
<?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對(duì)給定字符串進(jìn)行哈希處理。") ->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); } }
Tester
En termes de tests, Symfony nous fournit quelques outils pratiques. Le plus utile est la classe CommandSter, car elle fournit des classes d'entrée et de sortie spéciales pour tester nos commandes sans la ligne de commande.
Utilisons la classe CommandTester pour implémenter un test pour notre commande hash: hash.
Tout d'abord, créons un dossier /src
au même niveau que le n?tre. /tests
composer require symfony/consoleNous chargeons d'abord nos commandes à l'aide de la classe d'application. Ensuite, nous instancions un nouveau Commandteter. En utilisant CommandSter, nous pouvons configurer comment nous voulons appeler nos commandes. La dernière étape consiste à utiliser la méthode getDisplay () pour comparer le résultat d'exécution avec le résultat que nous attendons.
La méthode
getDisplay () enregistre le résultat de notre exécution de commande, tout comme nous le voyons sur la ligne de commande.
Conclusion
Nous venons de créer deux commandes différentes à l'aide du composant Console Symfony. Nous voyons également un bon moyen de tester ces commandes. Je vous suggère de regarder les différentes options et fonctionnalités des composants et nous donner quelques commentaires sur votre expérience dans la section des commentaires ci-dessous.Voulez-vous voir des tutoriels plus avancés sur la console Symfony sur SitePoint? S'il vous pla?t dites-nous!
Tout le code que nous avons écrit dans cet article peut être trouvé sur GitHub.
Symfony Console FAQComment installer la console Symfony?
La console Symfony
est un composant du cadre Symfony qui peut être installé à l'aide de Composer (l'outil de gestion de la dépendance en PHP). Pour installer Symfony Console, vous devez exécuter la commande suivante dans le terminal:. Cette commande téléchargera et installera le composant de la console Symfony dans votre projet. composer require symfony/console
Console Symfony fournit une API simple pour créer des commandes de ligne de commande. Ces commandes peuvent être utilisées pour les travaux Cron, les migrations, les importations ou tout autre type de tache qui peut être exécuté via la ligne de commande. Il prend également en charge les affichages de couleurs, les barres de progression, les tables et autres fonctionnalités interactives de la sortie.
Comment créer une nouvelle commande dans Symfony Console?
Pour créer une nouvelle commande, vous devez créer une nouvelle classe qui étend la classe SymfonyComponentConsoleCommand. Dans cette classe, vous définissez le nom, la description, les paramètres et les options de la commande dans la méthode de configuration. La méthode d'exécution contient la logique de la commande.
Comment exécuter les commandes dans Symfony Console?
Pour exécuter la commande, vous devez utiliser le script
suivi du nom de la commande. Par exemple, si vous avez une commande appelée bin/console
, vous pouvez l'exécuter avec la commande suivante: app:my-command
. bin/console app:my-command
La console Symfony
peut être utilisée en conjonction avec la doctrine (la couche d'abstraction de la base de données dans Symfony) pour gérer les migrations de la base de données. Vous pouvez créer une nouvelle commande qui exécute les requêtes SQL nécessaires pour migrer votre base de données.Comment gérer les paramètres et les options de commande dans la console Symfony?
Les paramètres et options de commande peuvent être définis dans la méthode de configuration de la classe de commande. Vous pouvez utiliser les méthodes GetArgument et GetOption pour récupérer les valeurs de ces paramètres et options dans la méthode d'exécution.
Comment afficher la sortie dans la console Symfony?
Symfony Console fournit plusieurs fa?ons d'afficher la sortie. Vous pouvez utiliser la méthode WriteEln pour afficher une ligne de texte, utiliser la méthode d'écriture pour afficher le texte (aucune ligne se casse à la fin) et utiliser la méthode de la table pour afficher la table.
Comment gérer les erreurs dans la console Symfony?
Les erreurs peuvent être gérées en lan?ant des exceptions. Symfony Console attrapera ces exceptions et affichera un message d'erreur. Vous pouvez également utiliser la méthode de sortie pour arrêter l'exécution de la commande et renvoyer le code de sortie.
Comment tester les commandes dans Symfony Console?
Symfony Console fournit une classe CommandTester qui peut être utilisée pour tester les commandes. Vous pouvez utiliser cette classe pour exécuter des commandes avec des paramètres et des options spécifiques et affirmer le code de sortie et de sortie.
Comment utiliser Symfony Console dans Symfony Project?
Dans le projet Symfony, vous pouvez utiliser le script bin/console
pour exécuter les commandes. Vous pouvez également créer vos propres commandes en créant une nouvelle classe étendant la classe SymfonyComponentConsoleCommand dans le répertoire src/Command
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage s?r; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La ma?trise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contr?ler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contr?le de liste blanche; 2. Renommez le fichier à une cha?ne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contr?ler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plut?t que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de taches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les co?ts de communication et améliorer l'efficacité de la maintenance du code.

Toinstallphpquickly, usexAmpPonWindowsorHomebrewonMacos.1.onwindows, downloadAndInstallxAmppp, selectComponents, startapache et placefilesInhtdocs.2.

En PHP, vous pouvez utiliser des crochets ou des accolades bouclées pour obtenir des caractères d'index spécifiques à la cha?ne, mais les crochets sont recommandés; L'index commence à partir de 0 et l'accès à l'extérieur de la plage renvoie une valeur nulle et ne peut pas se voir attribuer une valeur; MB_substr est nécessaire pour gérer les caractères multi-octets. Par exemple: $ str = "Hello"; echo $ str [0]; sortie h; et les caractères chinois tels que MB_substr ($ str, 1,1) doivent obtenir le résultat correct; Dans les applications réelles, la longueur de la cha?ne doit être vérifiée avant le boucle, les cha?nes dynamiques doivent être vérifiées pour la validité et les projets multilingues recommandent d'utiliser des fonctions de sécurité multi-octets uniformément.

Toléarnphpeffective, startBySettingUpAlocalServerERironmentUsingToolsLILYXAMPPANDACODEDITERLIGHILLEVSCODE.1) INSTRUSITIONXAMPFORAPACHE, MYSQL, ANDPHP.2) USACODEDEDITORFORSYNTAXSUPPORT.3)
