Más con Symfony

13.3. El sistema de opciones

Las opciones de las tareas de Symfony están organizadas en dos grupos diferentes, las opciones y los argumentos.

13.3.1. Opciones

Las opciones son las que se pasan mediante guiones medios. Puedes añadirlas en la línea de comandos en cualquier orden. Pueden ir acompañadas de un valor o no, en cuyo caso actúan como un valor booleano. Normalmente las opciones disponen tanto de una versión larga como de una versión corta. La forma larga normalmente se indica mediante dos guiones medios, mientras que la opción corta sólo requiere de un guión medio.

Algunos ejemplos de opciones habituales son la de ayuda (--help o -h), la opción de verbosidad (--quiet o -q) y la de versión (--version o -V).

Nota Las opciones de definen mediante la clase sfCommandOption y se guardan en una clase de tipo sfCommandOptionSet.

13.3.2. Argumentos

Los argumentos permiten proporcionar información en la línea de comandos. Se deben especificar en el mismo orden en que se han definido y si incluyen algún espacio en blanco en su interior, se deben encerrar mediante comillas (también puedes aplicar el mecanismo de escape en los espacios). Los argumentos pueden ser opcionales u obligatorios, en cuyo caso se debe especificar un valor por defecto al definir el argumento.

Nota Los argumentos se definen mediante la clase sfCommandArgument y se guardan en una clase de tipo sfCommandArgumentSet.

13.3.3. Argumentos y opciones por defecto

Las tareas de Symfony incluyen por defecto varios argumentos y opciones:

  • --help (-H): muestra este mensaje de ayuda.
  • --quiet (-q): no muestra mensajes por pantalla.
  • --trace (-t): activa la traza de ejecución, permitiendo accede a la traza completa.
  • --version (-V): muestra la versión del programa.
  • --color: fuerza que los mensajes muestren colores ANSI.

13.3.4. Opciones especiales

El sistema de tareas de Symfony también incluye dos opciones especiales llamadas application y env.

La opción application es necesaria cuando quieres acceder a una instancia de sfApplicationConfiguration en lugar de una instancia de sfProjectConfiguration. Este es por ejemplo el caso cuando la tarea va a generar URL, ya que el enrutamiento normalmente está asociado con la aplicación.

Cuando a una tarea se le pasa una opción llamada application, Symfony la detecta automáticamente y crea el correspondiente objeto sfApplicationConfiguration en vez del objeto sfProjectConfiguration. Como a las opciones se les puede establecer un valor por defecto, para aprovechar esta característica no es necesario indicar el nombre de la aplicación cada vez que se ejecuta la tarea.

Por su parte, la opción env controla el entorno en el que se ejecuta la tarea. Cuando no se indica esta opción, se utiliza el entorno test. Al igual que con la opción application, puedes establecer un valor por defecto para la opción env y Symfony lo utilizará automáticamente.

Como application y env no están incluidas dentro de la lista de opciones por defecto, es necesario incluirlas a mano en la tarea:

public function configure()
{
  $this->addOptions(array(
    new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name', 'frontend'),
    new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
  ));
}

Salvo que se indique lo contrario, la tarea del ejemplo anterior se ejecuta en el entorno dev de la aplicación frontend.