2012-04-09 3 views
11

Desidero creare un singolo denominato argomento/opzione per il comando symfony. E vogliono symfony a distinguere tali 3 opzioni:argomenti della console symfony2

  • my:command, che significa qualcosa come my:command --arg=null
  • my:command --arg, il che significa my:command --arg=defalutValue
  • my:command --arg=someValue, che è completamente esplicito.

I.e. Voglio due modalità di lavoro per il codice sotto quel comando: default uno e non-default con argomento addizionale, e che arg dovrebbe avere valore predefinito.

Capisco che potrei creare 2 arg, ma sto cercando una soluzione one-arg-rule-them-all.

È possibile eseguire ciò con le classi integrate o è necessario crearne di personalizzati? Se la soluzione è disponibile solo con classi personalizzate, per favore dimmi, da dove cominciare (ad esempio "crea sottoclasse di ..." o "installa un pacchetto chiamato ..."), perché non ho familiarità con l'architettura di Symfony2.

risposta

16

E 'possibile:

->addOption('arg', 'a', InputOption::VALUE_NONE) 
  • mia: il comando =>$input->getOption('arg') //false
  • mia: il comando --arg =>$input->getOption('arg') //true
  • mia: comando --arg = 5 =>$input->getOption('arg') //5
+5

Correggimi se sbaglio, è la prima volta che utilizzo questo metodo, ma penso che per ottenere questo risultato devi usare InputOption :: VALUE_OPTIONAL come terzo argomento. – manu

+1

Infatti con InputOption :: VALUE_NONE si ottiene un'eccezione di runtime: l'opzione non accetta un valore. –

+0

Con 'InputOption :: VALUE_NONE' otteniamo un'eccezione se le opzioni ottengono un valore – smarber

-3

Symfony2 dispone di un componente console che può essere utilizzato separatamente. È possibile consultare la documentazione here. Per ulteriori esempi è possibile controllare implementations di SensioGeneratorBundle.

+0

ho già letto la documentazione e hanno trovato alcun modo per creare questo albero-way l'opzione/argomento. E non ho bisogno di usare questo componente separatamente. Ho bisogno di un modo in cui questo possa essere risolto o approvato, questo non può essere risolto. – kirilloid

1

Risposta corvax non è corretta e non funziona. A partire da oggi, non è possibile raggiungere questo obiettivo.

Viene anche indicato nella documentazione della console: Using Command Options.

Vedi anche questi problemi su GitHub: