Vous avez une commande drush dont l'execution peut-être assez longue qui itère sur des éléments (ici des medias).
Voici comment afficher une barre de progression (progress bar) dans une commande drush.
Image

Mon fichier de commande drush
./web/modules/mon_module/src/Drush/Commands/MonModuleCommands.php
<?php
namespace Drupal\mon_module\Drush\Commands;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\media\Entity\Media;
use Drush\Attributes as CLI;
use Drush\Commands\AutowireTrait;
use Drush\Commands\DrushCommands;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
/**
* A Drush commandfile.
*/
final class MonModuleCommands extends DrushCommands {
use AutowireTrait;
/**
* Constructs a MonModuleCommands object.
*/
public function __construct(
#[Autowire(service: 'entity_type.manager')] private readonly EntityTypeManagerInterface $entityTypeManager,
) {
parent::__construct();
}
/**
* Allow to move existing media from one env to a new one.
*/
#[CLI\Command(name: 'mon_module:ma_commande', aliases: ['kme'])]
#[CLI\Option(name: 'limit', description: 'Max numbers of media to migrate.')]
#[CLI\Usage(name: 'mon_module:move-env --limit 5', description: 'Move at most 5 medias.')]
public function moveMediaToNewEnv(InputInterface $input, OutputInterface $output, $options = ['limit' => 0]) {
$limit = (int) $options['limit'];
$mediaStorage = $this->entityTypeManager->getStorage('media');
$mediaQuery = $mediaStorage->getQuery();
$mediaQuery->sort('created', 'ASC');
if ($limit > 0) {
$mediaQuery->range(0, $limit);
}
$mediasIds = $mediaQuery->execute();
$nbMedias = count($mediasIds);
$progressBar = new ProgressBar($output, $nbMedias);
foreach($mediasIds as $mediaId) {
// ici faire votre traitement
$progressBar->advance();
}
$progressBar->finish();
}
}
Contenus en rapport
Dans le cadre d'un développement custom, j'ai créé pour un fichier de commandes custom dans un module drupal custom, en utilisant la commande
Ajouter un commentaire