válido para Symfony 1.3 y 1.4
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
válido para Symfony 1.3 y 1.4