spouštění vlastních commandu pro consoli v presenteru

Cars Tomas
Člen | 43
+
0
-

Ahoj,
mohl by mě prosím někdo poradit, jakým způsobem spouštět vlastní commandy pro consoli i v presenteru? Úplně se mi to nedaří zprovoznit.
Pročetl jsem si vlákno https://forum.nette.org/…eni-commandu ale jsem z toho pořád nějakej jalovej.

Moc děkuji

MW
Člen | 615
+
0
-

Myslíš exec() ?

Cars Tomas
Člen | 43
+
0
-

nn, měl jsem na mysli command pro kdyby/console

<?php
namespace App\Console\Products;

use Symfony,
	Symfony\Component\Console\Command\Command,
	Symfony\Component\Console\Input\InputInterface,
	Symfony\Component\Console\Output\OutputInterface,
	Nette,
	Kdyby
	;

class TestCommand extends Command {

	protected function configure() {
		$this->setName('app:products:test');
	}

	protected function execute(InputInterface $input, OutputInterface $output) {

		try {
			$output->writeLn('Spoustim test...');



			$output->writeLn('OK');
			return 0; // zero return code means everything is ok

		} catch (\Exception $e) {
			$output->writeLn('<error>' . $e->getMessage() . '</error>');
			return 1; // non-zero return code means error
		}
	}
}
?>

tento potřebuji práve spustit v presenteru

David Matějka
Moderator | 6445
+
0
-

budes muset specifikovat, co si zkusil, co se ti uplne nedari a z ceho si „pořád nějakej jalovej.“ :))

Cars Tomas
Člen | 43
+
0
-

mám takový to presenter:

<?php
namespace App\FrontModule\Presenters;

use Nette,
	Kdyby\Console\Application,
	Kdyby\Console\StringOutput,
	Symfony\Component\Console\Input\ArrayInput
	;


class ConsolePresenter extends FrontPresenter {


	/** @var Application @inject */
	public $consoleApp;


	public function actionDefault() {
		$input = new ArrayInput(['name' => 'app:products:test']);
		$output = new StringOutput();

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

		dump($output);
	}

}
?>

a v dump $output je: Symfony\Component\Console\Exception\CommandNotFoundException a pro jistotu jsem si do toho commadu dal řádek:

<?php
Nette\Utils\FileSystem::write(__DIR__ .'/test.txt', 'pokus '.Nette\Utils\DateTime::from('now'));
?>

abych to eventuelně viděl i fyzicky na disku, a nic se neprovedlo

David Matějka
Moderator | 6445
+
0
-

ukaz, jak mas ten command registrovany

Cars Tomas
Člen | 43
+
0
-

v neonu mam toto:

console:
commands:
 – App\Console\Products\TestCommand

a pokud prikaz spustim normalne pres consoli: php index.php app:products:test tak se provede v pořádku

EDIT:
když to v presenteru spustím takto:

<?php
$input = new ArrayInput([]);

$this->consoleApp->run($input, $output);
?>

a dám si výsput $output->getOutput() tak mi to nevyhodí žádné zaregistrované commandy

Editoval Cars Tomas (6. 6. 2017 14:37)

abc
Člen | 92
+
+2
-

Normálně si injectni ten command, do něj si přidej metodu, run a přes ní volej execute s těma input/output?

Jinak metoda execute může být public, tak to můžeš udělat volat i jí, když si jí změníš

Editoval abc (6. 6. 2017 14:40)

Cars Tomas
Člen | 43
+
0
-

abc napsal(a):

Normálně si injectni ten command, do něj si přidej metodu, run a přes ní volej execute s těma input/output?

Jinak metoda execute může být public, tak to můžeš udělat volat i jí, když si jí změníš

super, to je presne ono diky

Editoval Cars Tomas (6. 6. 2017 14:46)