gpt4 book ai didi

php - 命令调用服务中的 Symfony 进度条

转载 作者:可可西里 更新时间:2023-11-01 13:53:15 24 4
gpt4 key购买 nike

您可以通过以下方式在命令中显示进度条:

use Symfony\Component\Console\Helper\ProgressBar;

$progress = new ProgressBar($output, 50);

$progress->start();

$i = 0;
while ($i++ < 50) {
$progress->advance();
}

$progress->finish()

但是,如果您只在命令中调用服务怎么办:

// command file
$this->getContainer()->get('update.product.countries')->update();

// service file
public function update()
{
$validCountryCodes = $this->countryRepository->findAll();

$products = $this->productRepository->findWithInvalidCountryCode($validCountryCodes);

foreach ($products as $product) {
...
}
}

有没有办法以与命令文件类似的方式在服务 foreach 循环中输出进度?

最佳答案

您需要以某种方式修改该方法。这是一个例子:

public function update(\Closure $callback = null)
{
$validCountryCodes = $this->countryRepository->findAll();

$products = $this->productRepository->findWithInvalidCountryCode($validCountryCodes);

foreach ($products as $product) {
if ($callback) {
$callback($product);
}
...
}
}

/**
* command file
*/
public function execute(InputInterface $input, OutputInterface $output)
{
$progress = new ProgressBar($output, 50);

$progress->start();

$callback = function ($product) use ($progress) {
$progress->advance();
};
$this->getContainer()->get('update.product.countries')->update($callback);
}

关于php - 命令调用服务中的 Symfony 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33128576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com