SyMfonAK - vyvíjame databázy pomocou frameworku Symfony

Ako volať iné príkazy

Z SyMfonAK
Prejsť na: navigácia, hľadanie

Symfony dokumentáciaZlož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.