2012-04-09 10 views
11

Quiero crear un solo llamado argumento para el comando symfony. Y quieren Symfony para distinguir esos 3 opciones:argumentos de la consola symfony2

  • my:command, que significa algo así como my:command --arg=null
  • my:command --arg, lo que significa my:command --arg=defalutValue
  • my:command --arg=someValue, que es totalmente explícito.

I.e. Quiero dos modos de trabajo para el código bajo ese comando: predeterminado uno y no predeterminado con argumento adicional, y ese arg debe tener valor predeterminado.

Entiendo que podría crear 2 argumentos, pero estoy buscando la solución one-arg-to-rule-them-all.

¿Es posible lograr eso con las clases incorporadas o debería crear las personalizadas? Si la solución solo está disponible con clases personalizadas, dígame por dónde empezar (es decir, "crear subclase de ..." o "instalar un paquete llamado ..."), porque no estoy familiarizado con la arquitectura de Symfony2.

Respuesta

16

Es posible:

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

Corrígeme si me equivoco, es la primera vez que uso este método, pero creo que para obtener este resultado debes usar InputOption :: VALUE_OPTIONAL como tercer argumento. – manu

+1

De hecho, con InputOption :: VALUE_NONE obtiene una excepción de tiempo de ejecución: la opción no acepta un valor. –

+0

Con 'InputOption :: VALUE_NONE' obtenemos una excepción si las opciones obtienen un valor – smarber

-3

Symfony2 tiene un componente de consola que se puede usar por separado. Puede ver la documentación here. Para obtener más ejemplos, puede marcar implementations de SensioGeneratorBundle.

+0

ya he leído la documentación y no encontró manera de crear este árbol vías opción/argumento. Y no necesito usar este componente por separado. Necesito una forma en que esto pueda ser resuelto o aprobado, esto no podría ser resuelto. – kirilloid

1

Respuesta de corvax es incorrecta y no funciona. A partir de hoy, simplemente no puedes lograr esto.

Incluso se indica en la documentación de la consola: Using Command Options.

Véase también estas cuestiones en GitHub:

Cuestiones relacionadas