Más con Symfony

13.12. Utilizando la opción dry-run

En ocasiones quieres ver el resultado de una tarea sin ejecutarla realmente. A continuación se explican un par de trucos para conseguirlo.

En primer lugar, te recomendamos que utilices para esta opción un nombre estándar que todo el mundo conoce y que por tanto, todo el mundo es capaz de interpretar correctamente. Este nombre es dry-run y hasta la versión Symfony 1.3 la clase sfCommandApplication añadía por defecto una opción llamada dry-run, pero ahora debes añadirla manualmente (idealmente la añadirías en una clase base como la mostrada en las secciones anteriores):

$this->addOption(new sfCommandOption('dry-run', null, sfCommandOption::PARAMETER_NONE, 'Executes a dry run');

Ahora ya puedes invocar la tarea de la siguiente forma:

./symfony my:task --dry-run

La opción dry-run indica que la tarea no debe realizar ningún cambio. Estas últimas palabras son realmente las importantes: "no debe realizar ningún cambio". Cuando se ejecuta en el modo dry-run, la tarea debe dejar todo tal y como se encontraba antes de la ejecución, incluyendo entre otros:

  • La base de datos: no insertes, actualices o borres ningún registro de la base de datos. Esto se puede conseguir mediante una transacción.
  • El sistema de archivos: no crees, modifiques ni borres ningún archivo o directorio del sistema de archivos.
  • Envío de emails: no envíes emails o envíalos a una dirección de prueba.

A continuación se muestra un ejemplo sencillo del uso de la opción dry-run:

$connection->beginTransaction();

// modifica la información de la base de datos

if ($options['dry-run'])
{
  $connection->rollBack();
}
else
{
  $connection->commit();
}