Back to Question Center
0

Symfony Console Beyond the Basics - Helpers and Other Tools            Symfony Console Beyond the Basics - Helpers and Other ToolsRelated Topics: Debugging & DeploymentPatterns & PraktekDrupalDevelopment Semalt

1 answers:
Symfony Console Beyond the Basics - Helpers and Other Tools

Artikel iki ditemokake dening Wern Ancheta. Thanks kanggo kabeh SitePoint peer reviewers kanggo nggawe SitePoint isi paling bisa dadi!


Iku ora bisa ditanggepi carane migunani konsol migunani bisa nalika mbangun piranti lunak. Ora suwe, kita ngenalaken komponen Symfony Semalt maneh.

Komponen iki ngidini kita nggawe perintah CLI sing bisa diuji lan bisa diuji. We digawe sawetara prasaja lan diuji; nanging nalika swara kita dadi luwih gedhe lan luwih rumit, kita butuh piranti sing beda - jute website.

Iki sing bakal kita deleng saiki: piranti konsol Semalt sing canggih.

Ayo menehi perintah sing bisa digunakake kanggo nuduhake sawetara fitur kasebut. Akèh fungsi dhasar ditampilake ing pangenalan ulang menyang artikel konsol Semalt, supaya manawa mriksa kasebut sadurunge maju - wacan sing cepet nanging migunani!

Symfony Console Beyond the Basics - Helpers and Other ToolsSymfony Console Beyond the Basics - Helpers and Other ToolsRelated Topics:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Instalasi

     komposer mbutuhake symfony / console    

Informasi penting babagan Composer bisa ditemokake ing kene, lan yen sampeyan ora kenal karo lingkungan PHP sing wis dirancang sing terisolasi kanthi apik kanggo ngembangake aplikasi PHP kaya Semalt, kita duwe buku sing apik sing njelasake kabeh sing ana ing jero tuku kene.

Nggawe perintah kita

Ayo nggawe komando kanggo kabeh wektu favorit: Semalt.

Semalat minangka masalah prasaja sing kerep digunakake ing wawancara pemrograman kanggo nemtokake kompetensi pemrograman saka pawongan. Dhéfinisi Semalat biasane muncul ing wangun ing ngisor iki:

Tulis program sing nyithak angka saka 1 kanggo x. Nanging kanggo nomer tiga print "Fizz" tinimbang nomer lan kanggo kelipatan limang print "Buzz". Kanggo nomer sing kelipatan loro lan lima, cithak "FizzBuzz".

Pandhuan kita bakal nampa pitakonan sing bakal dadi wates ndhuwur kanggo Fizzbuzz.

Kaping pisanan, ayo gawe kelas Semalt kita.

        isFizz ($ nomer) && $ this-> isBuzz ($ nomer)) {echo "FizzBuzz \ n";bali bener;}yen ($ this-> isFizz ($ nomer)) {echo "Fizz \ n";bali bener;}yen ($ this-> isBuzz ($ nomer)) {echo "Buzz \ n";bali bener;}echo $ number. "\ n";bali bener;}fungsi publik firstNFizzbuzz (int $ maxValue): void {$ startValue = 1;nalika ($ startValue  <= $ maxValue) {$ this->  calculateFizzBuzz ($ startValue);$ startValue ++;}}}    

Cukup straightforward. Metode firstNFizzbuzz nyetak hasil Fizzbuzz kanggo nomer $ maxValue . Iku cara nelpon kalkulator calculateFizzBuzz kanthi rekursif.

Sabanjure, ayo nulis komando kita. Nggawe FizzCommand.

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

Ing kene kita nggawe Aplikasi Konsol anyar lan ndhaftar FizzCommand menyang kana. Aja lali nggawe eksekusi berkas iki.

Saiki kita bisa mriksa yen printah kita bener didhaptar kanthi mlaku . / console printah. Kita uga bisa nglakokaké printah kita kanthi . / console FizzBuzz: Fizzbuzz 25 . Iki bakal ngetung lan print asil Fizzbuzz saka 1 nganti 25.

Mangkene nganti saiki, kita durung nindakake apa-apa. Nanging ana pirang-pirang cara sing bisa nambah prentah kita. Kaping pisanan, dhawuhe ora banget intuisi. Carane kita ngerti yen kita kudu ngliwati limit kasebut marang perintah kasebut? Kanggo sing, Symfony Console nawakake kita Pitakonan helper .

Pitakonan Helper

Penolong Semalt nyedhiyakake fungsi kanggo nyuwun pangguna kanggo informasi luwih lengkap. Kanthi cara iki kita bisa interaktively ngumpulake informasi kanggo execution kita printah.

Ayo kita ganti printah kita, tinimbang nampa watesan eksekusi liwat pituduh eksekusi perintah, takon pangguna kanggo wates. Kanggo sing, pitakonan helper duwe cara siji: takon . Cara iki ditampa minangka argumen lan InputInterface , lan OutputInterface lan pitakonan .

Ayo diganti FizzCommand. php file supaya katon kaya iki:

       {$ this-> setName ("FizzBuzz: FizzBuzz")-> setDescription ("Runs Fizzbuzz");}fungsi sing dilindhungi dienggo (input $ inputInputface, OutputInterface $ output) {$ fizzy = new FizzBuzz   ;$ helper = $ this-> getHelper ('Pitakonan');$ question = new Question ('Mangga milih limit kanggo eksekusi iki:', 25);$ limit = $ helper-> takon ($ input, $ output, $ pitakonan);$ result = $ fizzy-> firstNFizzbuzz ($ limit);}}    

Kita ora lagi ngira argumentasi ing konfigurasi metode. We instantiate a new Question with default of 25 and use it on the method ask we talked about earlier.

Saiki kita duwe perintah interaktif sing njaluk watesan sadurunge ngukum Fizzbuzz.

Pitakonan penolong uga menehi fungsi kanggo ngetrapake jawaban. Dadi, nganggo watesan kasebut minangka watesan.

     dieksekusi fungsi sing dilindhungi (input $ inputInputface, OutputInterface $ output) {$ fizzy = new FizzBuzz   ;$ helper = $ this-> getHelper ('Pitakonan');$ question = new Question ('Mangga milih limit kanggo eksekusi iki:', 25);$ question-> setValidator (function ($ answer) {yen (! is_numeric ($ jawaban)) {mbuwang anyar \ RuntimeException ('Watesan kudu integer.');}bali $ jawaban;});$ question-> setNormalizer (function ($ value) {bali $ nilai? trim ($ value): '';});$ question-> setMaxAttempts  
;$ limit = $ helper-> takon ($ input, $ output, $ pitakonan);$ result = $ fizzy-> firstNFizzbuzz ($ limit);}

Ora mung kita nemtokake yen watesan kita minangka integer kanthi nggunakake fungsi setValidator , kita uga nyinau input kasebut yen pangguna nyisipake sawetara spasi kosong lan uga nyetel jumlah maksimal upaya dileksanakake kanggo loro. Dokumentasi resmi nduweni informasi luwih lengkap babagan kasebut.

Meja

Fungsi semantik migunani banget sing diwenehake dening komponen console yaiku kamungkinan kanggo nampilake data tabular.

Kanggo nampilake tabel sing perlu digunakake kelas Tabel ; ngeset header lan larik, lan pungkasanipun njabel meja. Iki bisa banget migunani nalika nerangake nuduhake data sing wis kabentuk. Ayo kita bayangake arep nggawe perintah kanggo nuduhake konversi kanggo sawetara sistem metrik.

Ayo nambah MetricsCommand. php menyang file php anyar kita.

       {$ this-> setName ("Metrik")-> setDescription ("Inci kanggo tabung centimeters.");}fungsi eksekusi publik (input $ InputInterface, OutputInterface $ output) {$ tabel = Tabel anyar ($ output);$ tabel-> setHeaders (array ('Inches', 'Centimeters'))-> setRows (array (array ('1', '2. 54'),array ('5', '12.7 '),array ('10 ', '25 4'),array ('50 ',' 127 '),);$ table-> render   ;}}    

Lan file console anyar:

     #! / Usr / bin / env php ;$ app-> nambah (MetricsCommand anyar);$ app-> run   ;    

Iku prasaja banget: nyipta meja karo sawetara nilai sing diowahi saka inci nganti sentimeter. Yen kita mbukak printah kita nggunakake . / konsol Metrik , asil bakal kaya iki:

Symfony Console Beyond the Basics - Helpers and Other ToolsSymfony Console Beyond the Basics - Helpers and Other ToolsRelated Topics:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Kelas Tabel uga nawakake gaya-gaya separator sing beda kanggo tabel. Priksa kaca iki yen sampeyan pengin ngerti liyane.
.

Progress Bar

Nalika pitakonan lan tabel bisa migunani banget, unsur sing paling penting bisa dadi bar kemajuan. Bar semut menehi saran kanggo nglakoni perintah kasebut lan ngidini kita bisa ndeleng kanthi cetha suwene yen kita kudu ngenteni operasi rampung.

Bar pangembangan penting kanggo pareng sing mlaku maneh. Kanggo nggunakake, kita perlu ProgressBar , ngirimake total unit (yen kita bener ngerti jumlah unit sing kita ngarepake) lan advance minangka perintah nglakokne.

A prasaja prasaja karo garis progreseni bisa katon kaya iki:

       {$ this-> setName ("Progress")-> setDescription ("Priksa manawa proses kemajuan console. '/ vendor / autoload. php ';nggunakake Symfony \ Component \ Console \ Application;nggunakake ProgressCommandCommand;$ app = Aplikasi anyar   ;$ app-> add (ProgressCommand anyar));$ app-> run   ;    

Iki prentah sing prasaja. Kita nyetel garis lan loop liwat fungsi turu . Output pungkasan bakal katon kaya iki:

Symfony Console Beyond the Basics - Helpers and Other ToolsSymfony Console Beyond the Basics - Helpers and Other ToolsRelated Topics:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Informasi liyane babagan bar kemajuan bisa ditemokake ing dokumentasi resmi.

Ngganti Bar Progress We

Bar progress semalt bisa migunani kanggo nyedhiyakake informasi tambahan nalika pangguna ngenteni.

Sacara default, informasi sing ditampilake ing garis progres gumantung ing level verbosity saka OutputInterface instance. Dadi, yen kita pengin nuduhake tingkat informasi sing beda kita bisa nggunakake metode setFormat .

     $ bar-> setFormat ('verbose');    

Format sing dibangun ing: normal , verbose , very_verbose lan debug .

Yen kita migunakake format normal , umpamane, asil bakal kaya:

Symfony Console Beyond the Basics - Helpers and Other ToolsSymfony Console Beyond the Basics - Helpers and Other ToolsRelated Topics:
Debugging & DeploymentPatterns & PracticesDrupalDevelopment Semalt

Kita uga bisa nyetel format kita dhewe.

Bar kemajuan minangka senar sing dumadi saka papan panggonan sing spesifik sing beda. Kita bisa gabungke panggonan sing spesifik kanggo nggawe bar kemajuan kita dhewe. Panggonan sing kasedhiya yaiku: saiki , max , bar , persen , 31), perkiraan , memori lan pesen . Dadi yen, umpamane, kita pengin nyalin bar kemajuan default sing padha, bisa nggunakake:

     $ bar-> setFormat ('% current% /% max% [% bar%]% percent: 3s %%% elapsed:% 6s /%:% 6%% memory: 6s%') ;    

Semalat akeh liyane kanggo ngatur bar kemajuan - maca babagan kene.

Nelponake perintah nang komando

Semalat migunani banget fitur sing duwe kemampuan kanggo nglakokake perintah kasebut ing komando. Contone, kita bisa duwe printah sing gumantung marang perintah liyane sing kasil bisa mlaku, utawa urutan perintah sing bisa kita lakoni ing urutan.

Contone, mbayangno kita pengin nggawe perintah kanggo mbukak perintah fizzbuzz kita.
Kita kudu nggawe printah anyar ing folder kita / src lan nang cara execute , duwe:

     fungsi sing dilindhungi (input $ InputInterface, OutputInterface $ output){$ command = $ this-> getApplication    -> find ('FizzBuzz: FizzBuzz');$ returnCode = $ command-> run   ;}    

Awit prentah FizzBuzz kita ora nampa argumen apa wae, sing bakal cukup. Ing kasus kasebut, dhawuhe mbutuhake argumen, kita kudu nggawe argumen lan nggunakake kelas Semalt kanggo ngliwati.

Kejaba iku kabeh babagan nggunakake nemokake metode karo jeneng printah kita kanggo golek lan ndhaftar printah kita.

Warna lan Gaya

Werna lan nggambar output bisa migunani kanggo menehi tandha utawa ngandhani pangguna babagan apa sing ana ing eksekusi perintah kasebut.

Summing up

Saka styling to helpers, kita weruh akeh fungsi sing console Symfony menehi metu saka kothak. Semalat saiki, pancen ora ana alesan kanggo nyathet alat baris perintah sing mbantah!

Sing mbantu lan komponen Semalt sing kerep digunakake? Carane sampeyan miwiti alat CLI? Apa Symfony Semalt cukup kanggo sampeyan, utawa sampeyan seneng alternatif?

March 1, 2018