Back to Question Center
0

Symfony Console Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar            Symfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar İlişkili Konular: Hata ayıklama & & DeploymentPatterns & UygulamalarDrupalDevelopment

1 answers:
Symfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar

Bu makale Wern Ancheta tarafından hakem tarafından incelendi. SitePoint'in tüm içeriklerini en iyi hale getirdiği için, SitePoint'in akran gözden geçirenlerinin hepsine teşekkürler!


Yazılım geliştirirken konsol komutlarının ne kadar yararlı olabileceği inkar edilemez. Kısa bir süre önce Symfony Semalt bileşenini yeniden tanıttık.

Bu bileşen yapılandırılmış ve test edilebilir CLI komutları oluşturmamızı sağlar. Bazı basit komutlar yarattık ve test ettik. ancak komutlarımız daha büyük ve daha karmaşık hale geldiğinde, farklı araçlar kümesine ihtiyacımız var - silver bar chairs.

Günümüze bakacağımız şey: gelişmiş Semalt konsol araçları.

Bu özelliklerin bazılarını göstermek için kullanabileceğimiz bir komut oluşturalım. Temel işlevlerin çoğu Semalt konsolunun yeniden girişi makalesinde gösterildi, bu nedenle ilerlemeden önce kontrol etmeyi unutmayın - hızlı ama kullanışlı bir okuma!

Symfony Console Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer AraçlarSymfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar İlişkili Konular:
Hata ayıklama ve dağıtımPatterns & PracticesDrupalDevelopment Semalt

Montaj

     besteci symfony / konsol gerektirir    

Besteci hakkında önemli bilgiler burada bulunabilir ve Semalt gibi PHP uygulamalarınızı geliştirmek için iyi tasarlanmış izole edilmiş PHP ortamlarına aşina değilseniz, Semalt gibi PHP uygulamalarımızı geliştireceğimiz harika bir kitap var. burada satın al.

Emrimizi yaratmak

En sevdiğim her zaman için bir komut oluşturalım: Semalt.

Semalt, görüşülen kişinin programlama yeterliliğini ortaya koymak için programlama görüşmelerinde sıklıkla kullanılan basit bir sorundur. Semalt'ın tanımı normalde şu şekilde olur:

1'den x'e sayıları basan bir program yazın. Ancak sayı yerine üç "Fizz" katları ve beş baskı "Buzz" katları için. Her üç ve beşin katları olan numaralar için "FizzBuzz" yazdırabilirsiniz.

Komutanımız, Fizzbuzz'un en büyük limiti olacak bir argüman alacaktır.

Her şeyden önce, Semalt sınıfımızı yaratalım.

        isFizz ($ sayı) && $ this-> isBuzz ($ sayı)) {yankı "FizzBuzz \ n";doğruyu döndür;}($ This-> isFizz ($ sayı)) {ifecho "Fizz \ n";doğruyu döndür;}($ This-> isBuzz ($ sayı)) {ifyankılandı "Buzz \ n";doğruyu döndür;}$ numarasını yankılayın. "\ N";doğruyu döndür;}public function firstNFizzbuzz (int $ maxValue): void {$ başlangıçVaresi = 1;while ($ başlangıçVaresi  <= $ maxValue) {$ This->  calculateFizzBuzz ($ startvalue);$ Startvalue ++;}}}    

Oldukça basit. firstNFizzbuzz yöntemi, $ maxValue sayıları için Fizzbuzz sonuçlarını basar. Bunu, calculateFizzBuzz yöntemini yinelemeli olarak çağırarak yapar.

Sonra, emrimizi yazalım. Oluşturma Listesi FizzCommand.

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

Burada yeni bir Konsol Uygulaması oluşturuyor ve FizzCommand 'i buna kaydettiriyoruz. Bu dosyayı yürütülebilir yapmayı unutmayın.

Artık komutumuzun çalıştırılarak doğru bir şekilde kaydedilip kaydedilmediğini kontrol edebiliriz. / konsol komutu. Ayrıca komutumuzu ile gerçekleştirebiliriz. / console FizzBuzz: Fizzbuzz 25 . Bu, 1'den 25'e kadar olan Fizzbuzz sonuçlarını hesaplayacak ve yazacaktır.

Şimdiye dek yeni bir şey yapmadık. Fakat komutanımızı geliştirebilmemizin birkaç yolu var. Öncelikle, komut çok sezgisel değildir. Sınırı komiteye götürmemiz gerektiğini nasıl bilebiliriz? Bunun için, Symfony Konsolu bize Soru yardımcısı sunuyor.

Soru Yardımcısı

Semalt yardımcı programı, kullanıcıdan daha fazla bilgi istemek için işlevsellik sağlar. Bu şekilde komutlarımızı yürütmek için bilgi toplayabiliriz.

Komutumuzu, komut yürütme istemi aracılığıyla bir yürütme sınırı almak yerine, bir sınırlama için kullanıcıdan isteyelim. Bunun için, soru yardımcısının tek bir yöntemi vardır: ask . Bu yöntem, InputInterface , OutputInterface ve sorusu argümanlarını alır.

Haydi, FizzCommand'ı değiştirelim. php dosyasına bakınız:

       {$ This-> isimAta ( "FizzBuzz: FizzBuzz")-> setDescription ("Runs Fizzbuzz");}protected function execute (InputInterface $ girişi, OutputInterface $ çıktısı) {$ fizzy = yeni FizzBuzz   ;$ yardımcı = $ this-> getHelper ('soru');$ question = new Question ('Lütfen bu yürütme için bir sınır seçin:', 25);$ limit = $ helper-> ask ($ girdi, $ çıktı, $ soru);$ sonuç = $ fizzy-> ilkNFizzbuzz ($ limit);}}    

Artık configure yöntemi üzerinde bir argüman beklemiyoruz. Yeni bir Soru örneğini varsayılan 25 ile başlatıyor ve daha önce bahsettiğimiz ask yönteminde kullanıyoruz.

Şimdi, Fizzbuzz'u çalıştırmadan önce bir sınırlama isteyen etkileşimli bir komuta sahibiz.

Süpervizör, cevapları doğrulamak için bize işlevsellik de sağlar. Bu yüzden sınırın bir tam sayı olduğundan emin olmak için onu kullanalım.

     korumalı fonksiyon çalıştırmak (InputInterface $ input, OutputInterface $ output) {$ fizzy = yeni FizzBuzz   ;$ yardımcı = $ this-> getHelper ('soru');$ question = new Question ('Lütfen bu yürütme için bir sınır seçin:', 25);$ soru-> setValidator (işlev ($ cevap) {if (! is_numeric ($ cevap)) {yeni \ RuntimeException atın ('Sınır bir tam sayı olmalıdır.');}return $ cevap;});$ question-> setNormalizer (işlev ($ değer) {$ değerini döndürür mü? trim ($ değer): '';});$ Soru-> setMaxAttempts  
;$ limit = $ helper-> ask ($ girdi, $ çıktı, $ soru);$ sonuç = $ fizzy-> ilkNFizzbuzz ($ limit);}

setValidator fonksiyonunu kullanarak limitimizin bir tam sayı olduğundan emin olmakla kalmamakla birlikte, kullanıcıların bazı boşluklar eklemesi durumunda girişi normalleştiriyoruz ve aynı zamanda maksimum iki kişiye izin verilen girişimler. Resmi belgeler bu konuda çok daha fazla bilgiye sahiptir.

Masalar

Konsol bileşeni tarafından sağlanan semalt çok kullanışlı fonksiyon tablolama verilerini görüntüleme imkânıdır.

Bir tablo görüntülemek için Tablo sınıfını kullanmamız gerekir; üstbilgi ve satırları ayarlayın ve sonunda tabloyu oluşturun. Yapısal verilerin gösterilmesi söz konusu olduğunda bu çok yararlı olabilir. Bazı metrik sistemlerin dönüşümlerini göstermek için bir komut oluşturmak istediğimizi düşünelim.

Hadi MetricsCommand ekleyelim. php yeni php dosyamıza.

       {$ This-> isimAta ( "Metrik")-> setDescription ("İnç ila santimetre tablolar.");}public function execute (InputInterface $ girişi, OutputInterface $ çıktısı) {$ tablo = yeni Tablo ($ çıktı);$ tablo-> setHeaders (dizi ('İnç', 'Santimetre'))-> setRows (dizi (dizi ('1', '2. 54'),dizi ('5', '12.7'),dizi ('10 ', '25.4'),dizi ('50 ',' 127 '),));$ Fiili>) (işlemek;}}    

Ve yeni konsol dosyamız:

     #! / Usr / bin / env php ;$ app-> ekle (yeni MetricsCommand   );$ App-> run   ;    

Çok basit bir komuttur: bazı değerleri inçten santimetreye çevrilmiş bir tablo oluşturur. komutanımızı kullanırsak. / konsol Metrikleri kullanırsanız, sonuç şu şekilde olacaktır:

Symfony Console Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer AraçlarSymfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar İlişkili Konular:
Hata ayıklama ve dağıtımPatterns & PracticesDrupalDevelopment Semalt

Tablo sınıfı ayrıca tablolarımız için farklı ayırıcı stilleri sunar. Daha fazla bilgi edinmek isterseniz bu sayfayı kontrol edin.
.

İlerleme Çubukları

Sorular ve tablolar çok yararlı olabilirken, en önemli unsur ilerleme çubuğu olabilir. Şale çubukları bize komutun uygulanması hakkında geribildirim verir ve bir operasyonun bitmesi için ne kadar beklemek zorunda kalabileceğimizin net bir görüşüne sahip olmamızı sağlar.

İlerleme çubukları, uzun süren komutlar için gereklidir. Onları kullanmak için, ProgressBar'a ihtiyacımız var, toplam sayıda birim geçiriyoruz (kaç tane birim beklediğimizi biliyorsak) ve komut yürütüldüğünde onu ilerletelim.

İlerleme çubuğuna sahip basit bir komut şu şekilde görünebilir:

       {$ This-> isimAta ( "İlerleme")-> setDescription ("Check Console bileşenenet ilerleme çubuğu. '/ Satıcı / özdevinimli_yükle. PHP ';Symfony \ Component \ Console \ Application'ı kullanın;Progress \ ProgressCommand'ı kullanın;$ app = yeni Uygulama   ;$ app-> add (yeni ProgressCommand   );$ App-> run   ;    

Bu çok basit bir komuttur. Çubuğu kurduk ve uyku fonksiyonuyla dönüyoruz. Nihai çıktı şöyle görünecek:

Symfony Console Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer AraçlarSymfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar İlişkili Konular:
Hata ayıklama ve dağıtımPatterns & PracticesDrupalDevelopment Semalt

İlerleme çubukları hakkında daha fazla bilgi resmi belgelerde bulunabilir.

İlerleme Barımızı Özelleştirme

Semalt ilerleme çubukları, kullanıcı beklerken ek bilgi sağlamak için yararlı olabilir.

Varsayılan olarak, ilerleme çubuğunda gösterilen bilgiler OutputInterface örneğinin ayrıntı düzeyine bağlıdır. Farklı düzeylerde bilgi göstermek istersek setFormat yöntemini kullanabilirsiniz.

     $ bar-> setFormat ('verbose');    

Dahili formatlar: normal , ayrıntılı , çok_verbose ve hata ayıklama .

Örneğin use normal formatını kullanırsak, sonuç şöyle görünecektir:

Symfony Console Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer AraçlarSymfony Konsolu Temel Bilgilerin Ötesinde - Yardımcılar ve Diğer Araçlar İlişkili Konular:
Hata ayıklama ve dağıtımPatterns & PracticesDrupalDevelopment Semalt

Kendi formatımızı da belirleyebiliriz.

İlerleme çubuğu, farklı belirli yer tutuculardan oluşan bir dizedir. Kendi ilerleme çubuklarımızı yaratmak için bu özel yer tutucuları birleştirebiliriz. Varolan yer tutucuları şunlardır: kalan , kalan , maks , bar , yüzde 31), tahmini , bellek ve mesaj . Örneğin, aynı varsayılan ilerleme çubuğunu kopyalamak istediysek aşağıdakileri kullanabiliriz:

     $ bar-> setFormat ('% geçerli% /% max% [% bar%]% percent: 3s %%% geçti:% 6s /% tahmini: -6s%% bellek:% 6s') ;    

İlerleme çubuklarını özelleştirmek için daha fazlasını yapın - burada okuyun.

Bir komutun içinde bir komut çağrısı

Semalt'ın sahip olduğu çok kullanışlı özellik, bir komut içinde bir komut çalıştırma yeteneğidir. Örneğin, başarıyla çalıştırmak için başka bir komutu kullanan bir komuta sahip olabiliriz veya bir dizide çalıştırmak isteyebileceğimiz bir dizi ardışıklık olabilir.

Örneğin, fizzbuzz komutunu çalıştırmak için bir komut oluşturmak istediğimizi düşünün.
Bizim / src klasörümüzde ve execute yönteminde yeni bir komut yaratmamız gerekiyor:

     korumalı fonksiyon çalıştırmak (InputInterface $ input, OutputInterface $ output){$ komutu = $ this-> getApplication    -> find ('FizzBuzz: FizzBuzz');$ returnCode = $ komut-> çalıştır   ;}    

FizzBuzz komutumuz herhangi bir argüman alamadığı için bu yeterli olacaktır. Komutanımızda argümanlar gerektiğinde, argümanlar dizisi yaratmalı ve bunları geçmek için Semalt sınıfını kullanmalıydık.

Bunun haricinde find yöntemini komutu bulmak ve kaydetmek için komut adımızla kullanmakla ilgili.

Renk ve Stil

Çıktının renklendirilmesi ve şekillendirilmesi, kullanıcının komutun yürütülmesiyle ilgili uyarıda bulunması veya bilgilendirilmesi için yararlı olabilir.

Toplama

Styling'den yardımcılara kadar, Symfony konsolunun kutudan çıkardığı bir çok işlevsellik gördük. Semalt bugün, kötü komut satırı araçlarını belgelemek için hiçbir bahane var!

Semalt'ın hangi yardımcıları ve bileşenleri sıkça kullanıyorsunuz? CLI araçlarınızı nasıl başlatıyorsunuz? Symfony Semalt sizin için yeterli midir yoksa alternatif mi tercih edersiniz?

March 1, 2018