Creando tus propias tareas

Empezar a crear tareas de Symfony cuesta muy poco tiempo. Lo único que debes hacer es crear una tarea, darle un nombre, añadir algo de código y ya puedes ejecutar tu propia tarea. Vamos a crear una tarea muy sencilla de tipo ¡Hola Mundo! en un archivo llamado lib/task/sayHelloTask.class.php:

class sayHelloTask extends sfBaseTask
{
  public function configure()
  {
    $this->namespace = 'say';
    $this->name      = 'hello';
  }
 
  public function execute($arguments = array(), $options = array())
  {
    echo '¡Hola Mundo!';
  }
}

Ahora ya puedes ejecutar la tarea con el siguiente comando:

$ php symfony say:hello

Esta tarea simplemente muestra ¡Hola Mundo!, pero recuerda que acabamos de empezar. Las tareas no están pensadas para mostrar sus mensajes mediante instrucciones echo o print sencillas. Las tareas heredan de la clase sfBaseTask, por lo que tienen a sus disposición un montón de métodos útiles, incluyendo el método log() encargado de mostrar mensajes e información:

public function execute($arguments = array(), $options = array())
{
  $this->log('¡Hola Mundo!');
}

Como la ejecución de una tarea puede derivar en la ejecución de varias tareas diferentes que a su vez muestran mensajes, es recomendable utilizar el método logSection() al mostrar mensajes:

public function execute($arguments = array(), $options = array())
{
  $this->logSection('say', '¡Hola Mundo!');
}

Al método execute() de las tareas siempre se le pasan dos parámetros llamados $arguments y $options. Se de las variables que guardan todos los parámetros y todas las opciones que se pasan al ejecutar una tarea. Más adelante se explican con detalle los argumentos y las opciones, pero ahora vamos a hacer la tarea un poco más interactiva permitiendo que el usuario especifique la persona a la que queremos saludar:

public function configure()
{
  $this->addArgument('who', sfCommandArgument::OPTIONAL, '¿A quién quieres saludar?', 'Mundo');
}
 
public function execute($arguments = array(), $options = array())
{
  $this->logSection('say', '¡Hola '.$arguments['who'].'!');
}

Ahora, cuando se vuelve a ejecutar la tarea:

$ php symfony say:hello Geoffrey

Se muestra un mensaje diferente:

>> say       ¡Hola Geoffrey!

Como añadir un argumento ha sido muy sencillo, vamos a incluir en la tarea algo de metainformación, como por ejemplo la descripción de su propósito. Para ello, utiliza las propiedades briefDescription y description:

public function configure()
{
  $this->namespace           = 'say';
  $this->name                = 'hello';
  $this->briefDescription    = 'Hola Mundo sencillo';
 
  $this->detailedDescription = <<<EOF
La tarea [say:hello|INFO] es una implementación del clásico ejemplo
Hola Mundo utilizando el sistema de tareas de Symfony.
 
  [./symfony say:hello|INFO]
 
Puedes utilizar esta misma tarea para saludar a alguien mediante el
argumento [--who|COMMENT].
EOF;
 
  $this->addArgument('who', sfCommandArgument::OPTIONAL, '¿A quién quieres saludar?', 'Mundo');
}

Como puedes ver, la descripción de la tarea se puede decorar un poco mediante una sintaxis especial. Comprueba el resultado haciendo uso de la ayuda de las tareas de Symfony:

$ php symfony help say:hello
Puedes sugerir, comentar, criticar e informar de errores en contacto (arroba) librosweb.es

Las tareas en pocas palabras

El sistema de opciones
Los contenidos originales de este sitio están bajo una licencia de Creative Commons. Las traducciones disponen cada una de su propia licencia.