Progress bar v Artisan příkazu

Pro dlouho běžící úlohy může být užitečné zobrazit indikátor progresu. Laravel toto dokáže bez problémů, nicméně si ukážeme jak dosáhnout toho samého, ale co už v oficiální dokumentaci nenajdete.

V oficiální Laravel dokumentaci najdeme sekci popisující celý postup implementace progress baru:

$users = App\Models\User::all();

$bar = $this->output->createProgressBar(count($users));

$bar->start();

foreach ($users as $user) {
    $this->performTask($user);

    $bar->advance();
}

$bar->finish();

Využijeme zde output objekt a následně můžeme odstartovat, pokračovat a zastavit progress bar. Jako první musíme nadefinovat celkový počet kroků, které bude proces iterovat. Poté s každým prvkem pokračujeme v progress baru.

Co v dokumentaci ale už nenajdete je, že od Laravel verze 8.16.0 můžeme celý proces zkrátit:

$this->withProgressBar($users, function($user) {
    $this->performTask($user);
});

Díky tomuto se nám dost zkrátil zápis a také je kód více čitelný.