Otra forma alternativa de refactorizar las tareas consiste en incluir una tarea
dentro de otra. Esta técnica es muy sencilla gracias a los métodos
sfCommandApplicationTask::createTask()
y sfCommandApplicationTask::runTask()
.
El método createTask()
crea una instancia de la tarea indicada. Si se pasa el
nombre de una tarea como si se ejecutara en la línea de comandos, este método
devuelve una instancia de esa tarea lista para ejecutarla:
$task = $this->createTask('cache:clear');
$task->run();
Si no tienes muchas ganas de trabajar, el método runTask()
puede hacerlo todo
a la vez:
$this->runTask('cache:clear');
También es posible pasar argumentos y opciones (en este orden):
$this->runTask('plugin:install', array('sfGuardPlugin'), array('install_deps' => true));
Embeber unas tareas dentro de otras es muy útil para crear tareas complejas a
partir de tareas más sencillas. Se pueden combinar por ejemplo varias tareas
en una gran tarea llamada project:clean
y que se ejecute después de cada
instalación:
$tasks = array(
'cache:clear',
'project:permissions',
'log:rotate',
'plugin:publish-assets',
'doctrine:build-model',
'doctrine:build-forms',
'doctrine:build-filters',
'project:optimize',
'project:enable',
);
foreach($tasks as $task)
{
$this->run($task);
}