2015-04-17 38 views
5

Birden çok satırda görüntülenen ilerleme çubuğu bileşeni Symfony2 (2.6.6) ile basit bir komut görevinde progressbar component kullanın.Symfony

... 
$progress = new ProgressBar($output, $total); 
$progress->start(); 

if (($handler = fopen($file, "r")) !== FALSE) { 
    while (($row = fgetcsv($handler, 1000, ",")) !== FALSE) { 
     $this->whatever(); 
     $progress->advance(); 
    } 
    fclose($handler); 
    $progress->finish(); 
} 
... 

Ve benzeri çıkışı görünüyor:

Benim kod böyledir

0/50 [>---------------------------] 0% 
    5/50 [==>-------------------------] 10% 
10/50 [=====>----------------------] 20% 
15/50 [========>-------------------] 30% 
20/50 [===========>----------------] 40% 
25/50 [==============>-------------] 50% 
30/50 [================>-----------] 60% 
35/50 [===================>--------] 70% 
40/50 [======================>-----] 80% 
45/50 [=========================>--] 90% 
50/50 [============================] 100 

ilerleme çubuğu kendisini yeniden değildir, her ->advance() ile yeni bir çizgi olarak görünür. Eminim ki, ->whatever(); fonksiyonu, çıktıyla hiçbir şey yapmaz.

Bu davranışın nedenini bilen var mı? Teşekkürler! için

Maalesef benim İngilizce

+5

- [SymfonyDoc] formunu oluşturur (http://symfony.com/doc/current/components/console/helpers/progressbar.html), Bunu mu istiyorsunuz? – xurshid29

+0

Evet @ xurshid29! Bu mesajı görmedim! Teşekkür ederim! –

+0

@ xurshid29: Bu yorumu cevap olarak ekleyebilirsiniz. –

cevap

-1

Eğer $ output-> setDecorated (doğru) deneyebilirsiniz; ilerleme çubuğu başlatırken

3

Sen setOverwrite() kullanabilirsiniz:

$progress = new ProgressBar($output, $total); 
$progress->setOverwrite(true); 

$progress->start(); 
... 

Bu progressbar üzerine yazmak veya yeni satır satır oluşturmak için belirler. http://api.symfony.com/3.0/Symfony/Component/Console/Helper/ProgressBar.html#method_setOverwrite

+0

Peki bu tam olarak ne yapıyor? Cevabınızı açıklamak gerekiyor – Machavity

+0

Bu aslında bu sorunun gerçek cevabı. Daha iyi görünmek için şimdi düzenleyeceğim –

0

Konsol Yardımcısı'nın artık kullanımdan kaldırılmasından bu yana SymfonyStyle (sf> = 2.7) sınıfını kullanmayı tercih edersiniz. İşte

bazı kukla örnektir: "Platformunuz ANSI kodları desteklemiyorsa, ilerleme çubuğu güncellemeler yeni çizgiler olarak eklenir"

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $console = new SymfonyStyle($input, $output); 
    $console->title('Dummy progressBar example'); 
    $console->progressStart(100); 
    for ($i = 0; $i < 100; $i++) { 
     // do something 
     sleep(1); 
     $console->progressAdvance(); 
    } 
    $console->progressFinish(); // force progress 
    $console->success('Dummy progressBar example complete!'); 
}