Kdyby/Console a spouštění commandů

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Azathoth
Člen | 495
+
0
-

Nedaří se mi spustit třídu SchemaUpdateCommand z kdyby doctrine console. Třída je jako součást vendora zaregistrovaná v DI, takže jsem si ji injectnul do presenteru

/**
 * @SchemaUpdateCommand
 * @inject
 */
public $schemaUpdate;

ale když zavolám

$this->schemaUpdate->run($input, $output);

tak to hlásí, že tomu chybí cache a helperset. Musím registrovat nette cache i entitymanager jako helpery nebo dělám špatně něco jiného?

David Matějka
Moderator | 6445
+
+2
-

injectni si Symfony\Components\Console\Application a zavolej run, jako vstup pouzij ArrayInput a jako vystup StringOutput z kdyby

enumag
Člen | 2118
+
0
-

@DavidMatějka Tu metodu run volám bez parametrů a vše funguje – z jakého důvodu doporučuješ předávat ty co jsi uvedl?

David Matějka
Moderator | 6445
+
+1
-

@enumag mozna jsem to spatne pochopil, ale myslim, ze @Azathoth chce nekde v presenteru spustit konkretni command.

Bez parametru to taky spoustim v console.php, kde se spousti cela symfony console a ty parametry dodam pres argv a vystup jde do stdout, respektive stderr

Filip Procházka
Moderator | 4668
+
0
-

Taky by možná bylo fajn psát * @var SchemaUpdateCommand místo * @SchemaUpdateCommand.

Ale jestli to hackuješ kvůli tomuhle, tak se na to vykašli a raději si tu konzoli oprav.

Azathoth
Člen | 495
+
0
-

@FilipProcházka jo, já jsem zrovna neměl po ruce zdrojáky a psal jsem to na mobilu, v kódu mám tu anotaci správně.
A bohužel nevím, jak konzoli opravit.

@DavidMatějka přesně tak, chci spustit konkrétní command v presenteru.

Azathoth
Člen | 495
+
0
-

Díky moc. Injectunul jsem si Kdyby\Console\Application, přidal jsem tam Kdyby\Doctrine\Console\SchemaUpdateCommand a po zavolání run se to krásně rozběhlo. Netušil jsem předtím, že mám volat run na application a ne na samotný command.

Filip Procházka
Moderator | 4668
+
0
-

@Azathoth Bojím se, že místo řešení příčiny bude každej řešit důsledek a problém obcházet. Raději bych přišel na to kde je problém a opravil ho. Protože mně konzole funguje perfektně na všech projektech. Nechceš se stavit na Nette chat a vyřešit to raději správně?

Ja
Člen | 260
+
0
-

@Azathoth mohl bys prosim uvest snippet kodu? snazim se to tu stejne zbastlit a nejsem sto to rozchodit

akadlec
Člen | 1326
+
0
-

Neřešil někdo tu konzoli? Taky mám problém v tom že když ji spustím tak jakoby neproběhne :/ potřebuju vytvořit DB a nic. Jedu na apache a php 5.6 v debianu

akadlec
Člen | 1326
+
0
-

omg, tak můj problém vyřešen v index.php jsem měl podmínku na nespouštění appky pokud je v consoli ;)

// Run application.
if (!$container->parameters['consoleMode']) {
	$container->application->run();
}

E: tak nic, konzole sice jede, ale spouští se defaultní presenter jako by to šlo přes http požadavek :(

Editoval akadlec (23. 12. 2015 11:36)

Ja
Člen | 260
+
0
-

@akadlec tady je snippet ode me, toto resi zrovna schema update

<?php
$input = new ArrayInput(array('--force' => true));
$output = new StringOutput();

\Nette\DI\Extensions\InjectExtension::callInjects($this->context, $this->schema_update_command);
$this->schema_update_command->setHelperSet(new HelperSet(['em' => new EntityManagerHelper($this->em)]));
$this->schema_update_command->run($input, $output);
?>