Witam.
W Symfony chce stworzyć komendę która po wywołaniu uruchomi odpowiednią metodę z serwisu - tam zostaną przeprowadzone wsyzstkie operacje.
Chciałbym aby użytkownik miał pokazywany postęp operacji.
Czyli z metod serwisu muszę mieć dostęp do ProgressBar
z komendy.
W sieci znalazłem rozwiązanie polegające na przekazaniu do serwisu callbacku'u który będzie operował na progress bar.
Coś takiego:
// service method
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);
}
Problem w tym, że w serwisie operacja jest rozbita na wiele metod.
Pytanie czy jest możliwość (bo nie udaje mi się tego znaleźć w necie), żeby uczynić ten przekazany do metody update
callback dostępnym dla wszystkich metod w serwisie?
Mógłbym go przekazywać jako parametr do każdej uruchamianej metody, ale nie wygląda to zbyt elegancko...
Z góry dziękuję za pomoc.
Pozdrawiam