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