2017-03-23 6 views
1

Wie kann ich einen Befehl (app/console execute: mein: Befehl) in einem Dienst über neue Process ausführen?Symfony Process - Befehl aus dem Service ausführen

Ich versuche dies:

use Symfony\Component\Process\Process; 
use Symfony\Component\Process\Exception\ProcessFailedException; 

$process = new Process(
    'app/console execute:my:command' 
); 
$process->start(); 

Aber nichts passiert ... Wenn ich es manuell über das Terminal aufrufen funktioniert es:

app/console execute:my:command 

Was mache ich falsch?

Bearbeiten - Lösung: Wir müssen den gesamten Pfad schreiben. In meinem Fall:

($this->kernelRootDir is : %kernel.root_dir%) 
$processString = sprintf(
    'php %s/../app/console %s %s', 
    $this->kernelRootDir, 
    self::MY_COMMAND, 
    $myArgument 
); 

$process = new Process($processString); 
$process->start(); 

if (!$process->isSuccessful()) { 
    throw new ProcessFailedException($process); 
} 
+0

allgemein festgelegt haben Sie haben versucht, einen Pfad zu PHP cli hinter app/console hinzuzufügen? –

Antwort

2

Das ist so ziemlich alles, was Sie wirklich tun müssen. Ich das Arbeitsverzeichnis immer gesetzt und nehme an, dies benötigt wird, so dass der Symfony Befehl von der Wurzel des Projekts ausgeführt wird

$process = new Process(
    'app/console execute:my:command' 
); 
$process->setWorkingDirectory(getcwd() . "../"); 

$process->start(); 

Für Debugging-Zwecke I

$process->setOptions(['suppress_errors' => false]); 

sowie

+0

ja Das ist es - wir müssen den ganzen Pfad zum Befehl setzen .. sonst klappt es nicht. – goldlife