2012-04-09 3 views
11

Ich möchte eine einzige namens Argument/Option für symfony Befehl erstellen. Und wollen symfony diese 3 Möglichkeiten zu unterscheiden:symfony2 Konsole Argumente

  • my:command, was bedeutet so etwas wie my:command --arg=null
  • my:command --arg, was bedeutet, my:command --arg=defalutValue
  • my:command --arg=someValue, die vollständig explizit ist.

I.e. Ich möchte zwei Arbeitsmodi für Code unter diesem Befehl: Standard-1 und nicht-Standard mit zusätzlichen Argument, und dass Arg sollte Standardwert haben.

Ich verstehe, dass ich 2 Args erstellen konnte, aber ich suche nach einer Arg-zu-Regel-sie-alle-Lösung.

Ist es möglich, dies mit integrierten Klassen zu erreichen, oder sollte ich benutzerdefinierte Klassen erstellen? Wenn die Lösung nur mit benutzerdefinierten Klassen verfügbar ist, teilen Sie mir bitte mit, wo ich anfangen soll (z. B. "Unterklasse erstellen ..." oder "Paket mit Namen installieren ..."), da ich mit der Symfony2-Architektur nicht vertraut bin.

Antwort

16

Es ist möglich:

->addOption('arg', 'a', InputOption::VALUE_NONE) 
  • meine: Befehl =>$input->getOption('arg') //false
  • meine: Befehl --arg =>$input->getOption('arg') //true
  • my: Befehl --arg = 5 =>$input->getOption('arg') //5
+5

Korrigieren Sie mich, wenn ich falsch liege, es ist das erste Mal, dass ich diese Methode benutze, aber ich denke, um dieses Ergebnis zu erhalten, müssen Sie InputOption :: VALUE_OPTIONAL als drittes Argument verwenden. – manu

+1

In der Tat mit der InputOption :: VALUE_NONE erhalten Sie eine Laufzeitausnahme: Die Option akzeptiert keinen Wert. –

+0

Mit 'InputOption :: VALUE_NONE' erhalten wir eine Ausnahme, wenn die Optionen einen Wert erhalten – smarber

-3

Symfony2 haben eine Konsolenkomponente, die separat verwendet werden kann. Sie können die Dokumentation here sehen. Für ein weiteres Beispiel können Sie implementations von SensioGeneratorBundle überprüfen.

+0

ich bereits die Dokumentation lesen und fand keinen Weg, um diesen Baum-Weg zu schaffen Option/Argument. Und ich brauche diese Komponente nicht separat zu verwenden. Ich brauche einen Weg, wie das gelöst oder genehmigt werden könnte, das könnte nicht gelöst werden. – kirilloid

1