Inicio » Más con Symfony » Descubriendo el poder de la línea de comandos (segunda parte) » Generando archivos mediante esqueletos
Otro de los usos comunes de las tareas es la generación de archivos, que se
realiza mediante esqueletos y el método sfFilesystem::replaceTokens(). Como
su propio nombre sugiere, este método reemplaza tokens dentro de un conjunto
de archivos. Si se le pasa un array con los archivos y una lista de tokens,
reemplaza todas las apariciones de cada token en todos los archivos por su
correspondiente valor.
Para comprender mejor la utilidad de este método, vamos a reescribir de forma
parcial una tarea existente llamada generate:module. Para simplificar el
ejemplo, sólo nos vamos a fijar en el método execute() de esta tarea, por lo
que suponemos que se ha configurado correctamente con todas las opciones necesarias.
También nos vamos a olvidar de la validación.
Antes de crear la tarea, es necesario crear el esqueleto de los archivos y
directorios que se van a crear, definiéndolos por ejemplo dentro del directorio
data/skeleton/:
data/skeleton/
module/
actions/
actions.class.php
templates/
El esqueleto de actions.class.php debería tener el siguiente aspecto:
class %moduleName%Actions extends %baseActionsClass%
{
}
El primer paso de nuestra tarea consiste en copiar toda la estructura de archivos
y directorios en el lugar que corresponda:
$moduleDir = sfConfig::get('sf_app_module_dir').$options['module'];
$finder = sfFinder::type('any');
$this->getFilesystem()->mirror(sfConfig::get('sf_data_dir').'/skeleton/module', $moduleDir, $finder);
Ahora ya es posible reemplazar los tokens del archivo actions.class.php:
$tokens = array(
'moduleName' => $options['module'],
'baseActionsClass' => $options['base-class'],
);
$finder = sfFinder::type('file');
$this->getFilesystem()->replaceTokens($finder->in($moduleDir), '%', '%', $tokens);
¡Y esto es todo! Ya hemos creado nuestro nuevo módulo y lo hemos personalizado
mediante el reemplazo de tokens.
Nota
La tarea generate:module de Symfony busca realmente en el directorio
data/skeleton/ por si el programador ha definido algún esqueleto propio,
así que cuidado con los cambios que realices.
Puedes sugerir, comentar, criticar e informar de errores en contacto (arroba) librosweb.es