spouštění vlastních commandu pro consoli v presenteru
- Cars Tomas
- Člen | 43
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
- Cars Tomas
- Člen | 43
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
budes muset specifikovat, co si zkusil, co se ti uplne nedari a z ceho si „pořád nějakej jalovej.“ :))
- Cars Tomas
- Člen | 43
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
- Cars Tomas
- Člen | 43
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)
- Cars Tomas
- Člen | 43
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)