Back to Question Center
0

Symfony Console Beyond the Basics - Pomocníci a další nástroje            Symfony Console Beyond the Basics - Nápověda a další nástroje Související témata: Ladění & DeploymentPatterns & PraxeDrupalDevelopment Semalt

1 answers:
Konzola Symfony Kromě základů - Nápověda a další nástroje

Tento článek byl recenzován společností Wern Ancheta. Díky všem recenzentům společnosti SitePoint pro vytváření obsahu SitePoint to nejlepší může být!


Je nepopiratelné, jak užitečné příkazy konzoly mohou být při vývoji softwaru. Ne tak dávno jsme znovu představili součást Symfony Semalt.

Tato součást nám umožňuje vytvářet strukturované a testovatelné příkazy CLI - gestion de rrhh pdf to excel. Vytvořili jsme některé jednoduché příkazy a testovali je; ale když se naše příkazy stávají většími a složitějšími, potřebujeme jinou sadu nástrojů.

To je to, na co se dnes budeme zabývat: pokročilé nástroje pro konzolové nástroje.

Vytvořme příkaz, který můžeme použít k zobrazení některých z těchto funkcí. Většina základních funkcí byla ukázána v novém představení článku Semalt konzole, proto ji nezapomeňte zkontrolovat předtím, než to provedete - je to rychlé, ale užitečné čtení!

Symfony Console Beyond the Basics - Pomocníci a další nástrojeSymfony Console Beyond the Basics - Nápověda a další nástroje Související témata:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Instalace

     skladatel vyžadují symfony / konzoli    

Základní informace o kompozici najdete zde a pokud nejste obeznámeni s dobře navrženými izolovanými prostředími PHP, ve kterých můžete rozvíjet své PHP aplikace, jako je Semalt, máme fantastickou knihu, která vysvětluje, zakoupit zde.

Vytvoření příkazu

Vytvořme příkaz pro oblíbený čas: Semalt.

Semalt je jednoduchý problém, který se často používá při programování rozhovorů k potvrzení programovací kompetence dotazovaného. Definice Semalta obvykle přichází v následující podobě:

Napište program, který vytiskne čísla od 1 do x. Ale pro násobky tří tisíc "Fizz" namísto čísla a pro násobky pěti tisku "Buzz". Pro čísla, které jsou násobky obou tří a pět, vytiskněte "FizzBuzz".

Náš příkaz obdrží argument, který bude horní hranicí pro Fizzbuzz.

Nejprve vytvořme naši třídu Semalt.

        isFizz ($ number) && $ this-> isBuzz (číslo $)) {echo "FizzBuzz \ n";návrat true;}}pokud ($ this-> isFizz ($ number)) {echo "Fizz \ n";návrat true;}}pokud ($ this-> isBuzz ($ number)) {echo "Buzz \ n";návrat true;}}echo $ číslo. "\ n";návrat true;}}veřejná funkce firstNFizzbuzz (int $ maxValue): void {$ startValue = 1;zatímco ($ startValue  <= $ maxValue) {$ to->  vypočítatFizzBuzz ($ startValue);$ startValue ++;}}}}}}    

Docela přímočará. Metoda firstNFizzbuzz vytiskne výsledky Fizzbuzz pro $ maxValue čísel. To dělá tím, že zavolá metoda calculateFizzBuzz rekurzivně.

Dále napíšeme náš příkaz. Vytvořte FizzCommand.

     #! / Usr / bin / env php ;$ app-> add (nové FizzCommand   );$ app-> run   ;    

Zde vytvoříme novou konzolovou aplikaci a do ní zapíšeme FizzCommand . Nezapomeňte tento soubor spustit.

Můžeme nyní zkontrolovat, zda je náš příkaz správně registrován spuštěním . / konzola . Můžeme také provést příkaz s . / konzola FizzBuzz: Fizzbuzz 25 . To vypočítá a vytiskne výsledky Fizzbuzz od 1 do 25.

Až dosud jsme neučinili nic nového. Existuje však několik způsobů, jak zlepšit naše velení. Nejprve příkaz není příliš intuitivní. Jak víme, že musíme překročit limit příkazu? Symfony Console nám nabídne pomocníka pro otázky .

Otázka pomocníka

Pomůcka Semalt poskytuje funkčnost, ve které se může uživatel požádat o další informace. Tímto způsobem můžeme interaktivně shromažďovat informace pro provádění našich příkazů.

Změňme náš příkaz tak, že namiesto toho, abychom obdrželi limit spouštění příkazem pro spuštění příkazu, požádejte uživatele o limit. Za to, pomocník otázky má jednu metodu: ask . Tato metoda přijímá jako argumenty InputInterface , OutputInterface a otázku .

Změníme FizzCommand. php soubor tak vypadá takto:

       {$ this-> setName ("FizzBuzz: FizzBuzz")-> setDescription ("Runs Fizzbuzz");}}(InputInterface $ input, OutputInterface $ output) {$ fizzy = nový FizzBuzz   ;$ helper = $ tato-> getHelper ('otázka');$ question = new Otázka ('Vyberte prosím limit pro toto provedení:', 25);$ limit = $ helper-> ask ($ vstup, $ výstup, $ dotaz);$ výsledek = $ fizzy-> firstNFizzbuzz ($ limit);}}}}    

Již neočekáváme argument na metodě configure . Vyjadřujeme novou otázku s výchozím stavem 25 a použijeme ji na metodu ask , o níž jsme hovořili dříve.

Nyní máme interaktivní příkaz, který žádá o limit před spuštěním Fizzbuzz.

Pomocník s otázkami nám také dává funkčnost k ověření odpovědí. Takže to použijeme, abychom se ujistili, že limit je celé číslo.

     spuštění funkce chráněné funkce (InputInterface $ input, OutputInterface $ output) {$ fizzy = nový FizzBuzz   ;$ helper = $ tato-> getHelper ('otázka');$ question = new Otázka ('Vyberte prosím limit pro toto provedení:', 25);$ question-> setValidator (funkce ($ odpověď) {pokud (! is_numeric ($ answer)) {throw new \ RuntimeException ('Limit by měl být celé číslo.');}}vrátit $ answer;});$ question-> setNormalizer (funkce (hodnota $) {vrátit hodnotu $? trim (hodnota $): '';});$ question-> setMaxAttempts  
;$ limit = $ helper-> ask ($ vstup, $ výstup, $ dotaz);$ výsledek = $ fizzy-> firstNFizzbuzz ($ limit);}}

Nejen, že se ujistíme, že náš limit je celé číslo pomocí funkce setValidator , normalizujeme také vstup v případě, že uživatel vloží prázdné prostory a také nastaví maximální množství pokusy povolené dvěma. Oficiální dokumentace o tom má mnohem více informací.

Stoly

Velmi užitečnou funkcí, kterou poskytuje konzolová složka, je možnost zobrazit tabulkové údaje.

Abychom zobrazili tabulku, musíme použít třídu tabulky ; nastavte záhlaví a řádky a konečně proveďte tabulku. To může být velmi užitečné, pokud jde o zobrazování strukturovaných dat. Představme si, že chceme vytvořit příkaz pro zobrazení konverzí u některých metrických systémů.

Přidejme MetricsCommand. php do nového php souboru.

       {$ this-> setName ("Metriky")-> setDescription ("Tabulky palců centimetrů.");}}veřejné funkce execute (InputInterface $ input, OutputInterface $ output) {$ table = new Tabulka (výstup $);$ table-> setHeaders (pole ("palce", "centimetry"))-> setRows (pole (pole ('1', '2. 54'),pole ('5', '12, 7 '),pole ('10', '25, 4'),pole ('50', '127'),));$ tabulka-> render   ;}}}}    

A naše nová konzole soubor:

     #! / Usr / bin / env php ;$ app-> add (nová MetricsCommand   );$ app-> run   ;    

Je to velmi jednoduchý příkaz: vytváří tabulku s některými hodnotami převedenými z palců na centimetry. Spustíme-li náš příkaz pomocí . / console Metrics , bude výsledek něco takového:

“Symfony

Třída Tabulka nabízí také pro naše tabulky různé styly separátoru. Pokud chcete vědět více, zaškrtněte tuto stránku.
.

Progress bary

Zatímco otázky a tabulky mohou být velmi užitečné, nejdůležitějším prvkem může být lišta pokroku. Semaltové tyčinky nám poskytují zpětnou vazbu ohledně provádění příkazu a umožňují nám mít jasný přehled o tom, jak dlouho budeme muset čekat na dokončení operace.

Pokrokové pruhy jsou nezbytné pro delší běh příkazů. Abychom je mohli použít, potřebujeme ProgressBar , předáme jej celkový počet jednotek (pokud skutečně víme, kolik jednotek očekáváme) a předá nám při provádění příkazu.

Jednoduchý příkaz s ukazatelem postupu může vypadat takto:

       {$ this-> setName ("Pokrok")-> setDescription ("Kontrolní panel konzoly Kontrola komponent. '/ prodejce / autoload. php ';použijte nástroj Symfony \ Component \ Console \ Application;použijte program Progress \ ProgressCommand;$ app = nová aplikace   ;$ app-> add (nový ProgressCommand   );$ app-> run   ;    

Toto je velmi jednoduchý příkaz. Bar a smyčku jsme nastavili pomocí funkce sleep . Konečný výstup bude vypadat takto:

Symfony Console Beyond the Basics - Pomocníci a další nástrojeSymfony Console Beyond the Basics - Nápověda a další nástroje Související témata:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Více informací o ukazatelích pokroku naleznete v oficiální dokumentaci.

Přizpůsobení našeho panelu pokroku

Sloupky pro pokročilé mohou být užitečné pro poskytování dalších informací, zatímco uživatel čeká.

Ve výchozím nastavení závisí informace zobrazená na ukazateli postupu od úrovně výřečnosti instance OutputInterface . Pokud chceme ukázat různé úrovně informací, můžeme použít setFormat metodu.

     $ bar-> setFormat ('verbose');    

Vestavěné formáty jsou: normální , verbose , very_verbose a ladění .

Použijeme-li například použití normálního formátu, výsledek vypadá takto:

Symfony Console Beyond the Basics - Pomocníci a další nástrojeSymfony Console Beyond the Basics - Nápověda a další nástroje Související témata:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Můžeme také nastavit vlastní formát.

Průběžná čára je řetězec složený z různých zvláštních zástupných symbolů. Tyto konkrétní zástupné symboly můžeme spojit, abychom vytvořili vlastní propozice. Dostupné zástupné symboly jsou: zbývající , max , bar , procenta , 31), 58) odhadovaná , paměťová a zpráva . Pokud bychom například chtěli zkopírovat přesně stejný standardní pruh postupu, mohli bychom použít následující:

     $ bar-> setFormat ('% aktuální% /% max% [% bar%]% procent: 3s %%% uplynulo: 6s% /% odhadováno: -6s%% paměti: 6s%') ;    

Semalt mnohem více na přizpůsobení průběžných pruhů - o tom si přečtěte.

Volání příkazu uvnitř příkazu

Semalt velmi užitečná funkce je mít schopnost spustit příkaz uvnitř příkazu. Například můžeme mít příkaz, který závisí na úspěšném spuštění jiného příkazu, nebo řádu příkazů, které bychom mohli chtít spustit v pořadí.

Například si představte, že jsme chtěli vytvořit příkaz pro spuštění našeho příkazu fizzbuzz.
Ve složce / src a uvnitř metody execute bychom museli vytvořit nový příkaz:

     spuštění funkce chráněné funkce (Vstup $ vstup, OutputInterface $ výstup){{$ command = $ tato-> getApplication    -> najít ('FizzBuzz: FizzBuzz');$ returnCode = $ příkaz-> spustit   ;}}    

Protože náš příkaz FizzBuzz neobdrží žádné argumenty, stačí to. V případě, že by náš příkaz potřeboval argumenty, museli bychom vytvořit řadu argumentů a použít třídu Semalt, abychom je předali.

Jinak je to všechno o použití metody find s názvem našeho příkazu, abychom našli a zaregistrovali náš příkaz.

Barva a styl

Barvení a stylování výstupu může být užitečné pro upozornění nebo informování uživatele o něčem, co je v provádění příkazu.

Shrnutí

Od stylingu k pomocníkům jsme viděli spoustu funkcí, které konzola Symfony poskytuje mimo krabici. Semalt dnes, není absolutně žádná výmluva, že máte špatně zdokumentované nástroje příkazové řádky!

Které pomocníky a komponenty Semaltu často používáte? Jak spustíte nástroje CLI? Je pro vás Symfony Semalt dost, nebo preferujete alternativu?

March 1, 2018