SyMfonAK - vyvíjame databázy pomocou frameworku Symfony
Ako volať iné príkazy
Symfony dokumentácia → Zložka pre konzolu (The Console Component) → Príkazový riadok (console) → Ako volať iné príkazy
originál dokumentácia symfony.com/doc
Ak príkaz vyžaduje aby pred samotným jeho spustením bol vykonaný iný príkaz, možno ho spustiť priamo v príkaze. Iný prípad využitia je, ak tvoríte meta príkaz, ktorý spúšťa rôzne príkazy (napríklad pri nasadení novej verzie, vyčistenie cache a podobne).
Volanie iného príkazu je priamočiare:
use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; // ... protected function execute(InputInterface $input, OutputInterface $output) { $command = $this->getApplication()->find('demo:greet'); $arguments = [ 'name' => 'Fabien', '--yell' => true, ]; $greetInput = new ArrayInput($arguments); $returnCode = $command->run($greetInput, $output); // ... }
Najprv treba príkaz nájsť pomocou jeho mena cez find(). Potom treba vytvoriť new Symfony\Component\Console\Input\ArrayInput s argumentami pre volaný príkaz.
Nakoniec metóda run() spustí príkaz a vráti hodnotu z jeho execute() metódy.
Nápad
Ak chceme potlačiť výstup, posielame Symfony\Component\Console\Output\NullOutput ako druhý argument príkazu $command->run().
Upozornenie
Všetky príkazy sú spúšťané tým istým procesom a niektoré Symfony príkazy týmto spôsobom nebudú dobre fungovať. Napríklad cache:clear a cache:warmup menia definície niektorých tried a spúšťať niečo po týchto príkazoch poľahky spôsobí spadnutie procesu.
Poznámka
Vo väčšine prípad nie je dobrý nápad volať také príkazy, ktoré nie sú vykonávané v prostredí konzoly. Hlavným dôvodom je to, že výstup je prispôsobený príkazovému riadku.