contributte/console – jak se dostat ke službám

webman
Člen | 15
+
0
-

Prosím o radu.

Jak dostat do contributte/command služby nebo kontejner?
V presenterech se dá dostat ke službám přes $this->context->getService(), tady ale žádnej context není.
Díval jsem, že se z Command dá dostat k Application přes $this->getApplication(), ale tam context/kontejner taky není.

Na webu symfony/console je uvedeno, že se to má injectovat přes konstruktor. Ten ale počítá jen s názvem a ani ten se tam reálně nepředává.

Když jsem se pokusil překrýt konstruktor, píše mi to:

Too few arguments to function App\Module\Czruian\Console\ImportaddrsCommand::__construct(), 0 passed

Existuje nějaký jiný způsob, jak se dostat ke kontejneru nebo službám?

<?php

declare(strict_types=1);

namespace App\Module\Data\Console;

use App;
use Tracy;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

set_time_limit(0);

final class ImportdataCommand extends Command
{
    protected static $defaultName = 'data:import'; //***** command name
	private $T=NULL;

    public function __construct(string $name = null, App\Modules\App\Model\Transporter $transporter)
    {
		$this->T=$transporter;
    	parent::__construct($name);
    }

    /**
     * @param InputInterface $input
     * @param OutputInterface $output
     * @return void
     */
    protected function execute(InputInterface $input, OutputInterface $output)
    {
	//some code
	}
}

V configu v services mám:
` - App\Module\Czruian\Console\ImportdataCommand(„nazev“,@Transporter)`

jiri.pudil
Nette Blogger | 1029
+
+1
-

$name předávat nemusíš, je volitelný a pokud ho neuvedeš ani nenastavíš v metodě configure(), použije se $defaultName. Konstruktor je určitě správná cesta a soudě dle té chyby bych jako první zkusil smazat cache, CLI se totiž typicky spouští v produkčním režimu.