Back to Question Center
0

Symfónová konzola okrem základov - Pomocníci a ďalšie nástroje            Symfony Console Beyond the Basics - pomocníci a ďalšie nástroje súvisiace témy: Ladenie & DeploymentPatterns & PraktikyDrupalDevelopment Semalt

1 answers:
Konzola Symfony Okrem základov - Pomocníci a ďalšie nástroje

Tento článok bol preskúmaný odborníkom Wern Ancheta. Vďaka všetkým recenzentom spoločnosti SitePoint za to, že vytváranie obsahu SitePoint je to najlepšie!


Je nepopierateľné, ako užitočné príkazy konzoly môžu byť pri vývoji softvéru. Nie príliš krátko predtým sme opäť predstavili komponent Symfony Semalt.

Táto zložka nám umožňuje vytvárať štruktúrované a testovateľné príkazy CLI. Vytvorili sme niekoľko jednoduchých príkazov a testovali ich; ale keď sa naše príkazy stávajú väčšími a zložitejšími, potrebujeme iný súbor nástrojov - ray ban erika comprar en.

To je to, na čo sa dnes pozrieme: pokročilé nástroje na konzolové nástroje.

Vytvorme príkaz, ktorý môžeme použiť na zobrazenie niektorých z týchto funkcií. Väčšina základných funkcií sa ukázala v reintrodukcii do článku Semalt konzoly, takže sa uistite, či ju skontrolujete pred postupovaním - je to rýchle, ale užitočné čítanie!

Symfónová konzola okrem základov - Pomocníci a ďalšie nástrojeSymfony Console Beyond the Basics - pomocníci a ďalšie nástroje súvisiace témy:
Ladenie a nasadeniePatterny a praktikyDrupalDevelopment Semalt

Inštalácia

     skladateľ vyžadujú symfony / konzoly    

Základné informácie o kompozícii nájdete tu a ak nie ste oboznámení s dobre navrhnutými izolovanými prostredím PHP, v ktorých môžete rozvíjať vaše PHP aplikácie ako Semalt, máme fantastickú knihu vysvetľujúcu všetko v hĺbke k dispozícii pre zakúpiť tu.

Vytvorenie nášho príkazu

Vytvorme príkaz pre všetkých najobľúbenejších: Semalt.

Semalt je jednoduchý problém, ktorý sa často používa pri programovaní rozhovorov na potvrdenie programovej kompetencie respondenta. Definícia Semalta sa zvyčajne nachádza v tejto forme:

Napíšte program, ktorý vytlačí čísla od 1 do x. Ale pre násobky troch tlačových "Fizz" namiesto čísla a pre násobky päť tlač "Buzz". Pre čísla, ktoré sú násobky obidvoch troch a piatich, vytlačte "FizzBuzz".

Náš príkaz dostane argument, ktorý bude horným limitom pre Fizzbuzz.

Najprv vytvoríme našu triedu Semalt.

        isFizz ($ number) && $ this-> isBuzz (číslo $)) {echo "FizzBuzz \ n";vrátiť pravdu;}if ($ this-> isFizz (číslo $)) {echo "Fizz \ n";vrátiť pravdu;}if ($ this-> isBuzz (číslo $)) {echo "Buzz \ n";vrátiť pravdu;}echo $ číslo. "\ N";vrátiť pravdu;}verejná funkcia firstNFizzbuzz (int $ maxValue): void {$ startValue = 1;zatiaľ čo ($ startValue  <= $ maxValue) {$ This->  calculateFizzBuzz ($ startValue);$ StartValue ++;}}}    

Docela jednoduché. Metóda firstNFizzbuzz vytlačí výsledky Fizzbuzz pre $ maxValue čísel. Robí to tak, že volá rekurzívne metódu calculateFizzBuzz .

Potom napíš príkaz. Vytvorte FizzCommand.

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

Tu vytvoríme novú aplikáciu Console a zaregistrujeme FizzCommand do nej. Nezabudnite spustiť tento súbor.

Môžeme teraz skontrolovať, či je náš príkaz správne zaregistrovaný spustením . / konzola . Môžeme tiež vykonať náš príkaz s . / konzola FizzBuzz: Fizzbuzz 25 . Toto vypočíta a vytlačí výsledky Fizzbuzz od 1 do 25.

Doteraz sme neurobili nič nové. Existuje však niekoľko spôsobov, ako môžeme zlepšiť naše velenie. Najprv príkaz nie je veľmi intuitívny. Ako vieme, že musíme prejsť limit na príkaz? Symfony Console preto ponúka pomocníka pre otázky .

Pomocník s otázkami

Pomôcka Semalt poskytuje funkčnosť, aby používateľ požiadala o ďalšie informácie. Týmto spôsobom môžeme interaktívne zhromažďovať informácie o vykonaní našich príkazov.

Zmeňte náš príkaz, aby namiesto prijatia limitu vykonania prostredníctvom príkazu na vykonanie príkazu, požiadajte užívateľa o limit. Pomôcka pre otázky má preto jedinú metódu: ask . Táto metóda prijíma ako argumenty InputInterface , OutputInterface a otázku .

Zmeňme FizzCommand. php , takže to vyzerá takto:

       {$ This-> setName ( "FizzBuzz: FizzBuzz")-> setDescription ("Runs Fizzbuzz");}chránená funkcia execute (InputInterface $ input, OutputInterface $ output) {$ fizzy = nový FizzBuzz   ;$ helper = $ to-> getHelper ("otázka");$ question = new Otázka ('Vyberte limit pre toto prevedenie:', 25);$ limit = $ helper-> spýtajte sa ($ vstup, $ výstup, $ otázka);$ výsledok = $ fizzy-> firstNFizzbuzz ($ limit);}}    

Už neočakávame argument na metóde configure . Inicializujeme novú otázku s predvoleným 25 a použijeme ju na ask metóde, o ktorej sme hovorili skôr.

Teraz máme interaktívny príkaz, ktorý požaduje limit pred vykonaním Fizzbuzz.

Pomocník otázok nám tiež dáva funkciu na potvrdenie odpovedí. Takže použite to, aby sa ubezpečil, že limit je celé číslo.

     vykonaná chránená funkcia (Vstup $ vstup, OutputInterface $ výstup) {$ fizzy = nový FizzBuzz   ;$ helper = $ to-> getHelper ("otázka");$ question = new Otázka ('Vyberte limit pre toto prevedenie:', 25);$ question-> setValidator (funkcia ($ answer) {ak (! is_numeric ($ answer)) {throw \ new \ RuntimeException ('Limit by mal byť celé číslo.');}vrátiť $ answer;});$ question-> setNormalizer (funkcia (hodnota $) {vrátiť hodnotu $? trim (hodnota $): '';});$ Question-> setMaxAttempts  
;$ limit = $ helper-> spýtajte sa ($ vstup, $ výstup, $ otázka);$ výsledok = $ fizzy-> firstNFizzbuzz ($ limit);}

Nielen, že sa ubezpečujeme, že náš limit je celé číslo pomocou funkcie setValidator , normalizujeme vstup aj v prípade, že používateľ vloží prázdne medzery a nastaví maximálne množstvo pokusy povolené na dve osoby. Oficiálna dokumentácia o tom má oveľa viac informácií.

Tabuľky

Veľmi užitočnou funkciou, ktorú poskytuje konzolová zložka, je možnosť zobrazovať tabuľkové údaje.

Na zobrazenie tabuľky musíme použiť triedu tabuľky ; nastaviť hlavičky a riadky a nakoniec vykresliť tabuľku. To môže byť veľmi užitočné, pokiaľ ide o zobrazenie štruktúrovaných údajov. Predstavme si, že chceme vytvoriť príkaz na zobrazenie konverzie pre niektoré metrické systémy.

Pridajme MetricsCommand. php do nášho nového php súboru.

       {$ This-> setName ( "metriky")-> setDescription (tabuľka "palce do centimetrov.");}verejná funkcia execute (InputInterface $ input, OutputInterface $ output) {$ table = nová tabuľka (výstup $);$ stolík-> setHeaders (pole ("palce", "centimetre"))-> setRows (array (array ('1', '2, 54'),array ("5", "12, 7"),pole ('10', '25, 4'),pole ("50", "127"),));$ Tabuľka adries pridelených> render   ;}}    

A naša nová konzola :

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

Je to veľmi jednoduchý príkaz: vytvára tabuľku s niektorými hodnotami prevedenými z palcov na centimetre. Ak spustíme náš príkaz pomocou . / metrály konzoly , výsledok bude takýto:

Symfónová konzola okrem základov - Pomocníci a ďalšie nástrojeSymfony Console Beyond the Basics - pomocníci a ďalšie nástroje súvisiace témy:
Ladenie a nasadeniePatterny a praktikyDrupalDevelopment Semalt

Trieda Tabuľka nám tiež ponúka rôzne štýly oddeľovačov pre naše tabuľky. Ak chcete vedieť viac, pozrite si túto stránku.
.

Progress Bars

Keďže otázky a tabuľky môžu byť veľmi užitočné, najdôležitejším prvkom by mohol byť pruh postupu. Semaltové tyče nám poskytujú spätnú väzbu o vykonaní príkazu a umožňujú nám mať jasný pohľad na to, ako dlho budeme musieť čakať na dokončenie operácie.

Priebežné riadky sú dôležité pre dlhšie spustené príkazy. Aby sme ich mohli použiť, potrebujeme ProgressBar , odovzdať ho celkovým počtom jednotiek (ak vieme, koľko jednotiek očakávame) a postupovať tak, ako príkaz vykoná.

Jednoduchý príkaz s pruhom postupu môže vyzerať takto:

       {$ This-> setName ( "Progress")-> setDescription ("Kontrolný panel konzoly Kontrola komponentov. , / Predajca / AutoLoad. php ';použite aplikáciu Symfony \ Component \ Console \ Application;použite program Progress \ ProgressCommand;$ app = nová aplikácia   ;$ app-> add (nový ProgressCommand   );$ App-> run   ;    

Toto je veľmi jednoduchý príkaz. Nastavili sme lištu a slučku cez funkciu sleep . Konečný výstup bude vyzerať takto:

Symfónová konzola okrem základov - Pomocníci a ďalšie nástrojeSymfony Console Beyond the Basics - pomocníci a ďalšie nástroje súvisiace témy:
Ladenie a nasadeniePatterny a praktikyDrupalDevelopment Semalt

Viac informácií o ukazovateľoch pokroku nájdete v oficiálnej dokumentácii.

Prispôsobenie nášho zoznamu pokroku

Stĺpce progresívneho posunu môžu byť užitočné na poskytovanie ďalších informácií počas čakania užívateľa.

V predvolenom nastavení závisia informácie uvedené na lište postupu od úrovne výrečnosti OutputInterface . Ak teda chceme zobraziť rôzne úrovne informácií, môžeme použiť metódu setFormat .

     $ bar-> setFormat ("verbose");    

Vstavané formáty sú: normálne , verbose , very_verbose a debug .

Ak použijeme napr. Normálny formát , výsledok bude vyzerať takto:

Symfónová konzola okrem základov - Pomocníci a ďalšie nástrojeSymfony Console Beyond the Basics - pomocníci a ďalšie nástroje súvisiace témy:
Ladenie a nasadeniePatterny a praktikyDrupalDevelopment Semalt

Môžeme tiež nastaviť vlastný formát.

Pruh postupu je reťazec, ktorý je zložený z rôznych špecifických zástupných symbolov. Tieto špecifické zástupné symboly môžeme kombinovať, aby sme vytvorili vlastné bariéry pokroku. Dostupné zástupné symboly sú: aktuálne , max , bar , percentá , 31), odhadovaná , pamäťová a správa . Ak sme napríklad chceli skopírovať presne ten istý predvolený ukazovateľ postupu, mohli by sme použiť nasledovné:

(%)% (%)% (%)% (%) ;

Semalt oveľa viac na prispôsobenie priebežných pruhov - prečítajte si to tu.

Volanie príkazu vnútri príkazu

Semalt veľmi užitočnou funkciou je mať schopnosť spustiť príkaz vnútri príkazu. Napríklad, môžeme mať príkaz, ktorý závisí od úspešného spustenia iného príkazu alebo z množstva príkazov, ktoré by sme mohli chcieť spustiť v poradí.

Predstavte si napríklad, že chceme vytvoriť príkaz na spustenie nášho príkazu fizzbuzz.
V našom priečinku / src a vnútri metódy execute by sme museli vytvoriť nový príkaz:

     vykonať chránenú funkciu (InputInterface $ input, OutputInterface $ output){$ command = $ to-> getApplication    -> nájsť ('FizzBuzz: FizzBuzz');$ návratCode = $ príkaz-> spustiť   ;}    

Keďže náš príkaz FizzBuzz neobdrží žiadne argumenty, stačilo by to. V prípade, že by náš príkaz potreboval argumenty, museli by sme vytvoriť rad argumentov a použiť triedu Semalt, aby sme ich preniesli.

Okrem toho je to všetko o použití metódy find s našim príkazovým menom na nájdenie a registráciu nášho príkazu.

Farba a štýl

Vyfarbenie a tvarovanie výstupu môže byť užitočné pre upozornenie alebo informovanie užívateľa o niečom, čo je v jeho príprave.

Zhrnutie

Od štýlu po pomocníkov sme videli veľa funkcií, ktoré konzola Symfony poskytuje mimo škatuľky. Semalt dnes, tam je absolútne žiadne ospravedlnenie mať zle zdokumentované nástroje príkazového riadku!

Ktoré pomocníci a komponenty Semalta často používate? Ako začnete používať nástroje CLI? Je to Symfony Semalt dosť pre vás, alebo uprednostňujete alternatívu?

March 1, 2018