Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cómo crear archivos de texto (.txt) con Twig y Symfony2

27 de junio de 2015

Hola a todos.

Quiero crear un archivo de texto donde estará un reporte de varias entidades. Ya se que contendrá el reporte pero me falta crear el archivo y saber donde se almacena.

Deseo hacerlo con el motor de plantillas Twig y Symfony2. Gracias


Respuestas

#1

Para darte una respuesta detallada, tendríamos que conocer más detalles sobre tu aplicación, como por ejemplo si esos archivos se generan en un controlador o mendiante un comando. El caso más sencillo sería mediante un controlador. Para ello tienes que seguir 3 pasos:

1) Crea la plantilla del informe, para ello, crea el directorio app/Resources/views/informes/ y dentro crea una plantilla llamada informe1.txt.twig. Ahora sólo tienes que añadir el contenido de esa plantilla, que es exactamente igual que hacerlo para una página HTML pero sin usar etiquetas. Puedes hacer uso de cualquier filtro o función de Twig, así que este paso es muy sencillo.

2) Renderiza la plantilla del informe. Aquí el truco está en usar el atajo renderView() en vez de render(), ya que no quieres devolver una respuesta al usuario sino renderizar la plantilla y guardar los contenidos:

// obtener los datos del informe (mediante una base de datos por ejemplo)
$ datos = ...
 
$informe = $this->renderView('informes/informe1.txt.twig', $datos);

3) Guardar el informe generado en un archivo. Puedes usar un simple file_put_contents() de PHP, pero te recomiendo hacerlo un poco mejor. Lo primero, crea un directorio para guardar los informes, por ejemplo app/data/informes/. Después, usa el componente Filesystem de Symfony para hacer el file_put_contents() de una manera más segura:

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
 
// ...
 
$ datos = ...
$informe = $this->renderView('informes/informe1.txt.twig', $datos);
 
$fs = new Filesystem();
$archivo = $this->container->getParameter('kernel.root_dir').'/data/informes/nombreDelInforme.txt';
 
try {
    $fs->dumpFile($archivo, $informe);
} catch (IOExceptionInterface $e) {
    echo "Se ha producido un error al crear el archivo ".$e->getPath();
}

@javiereguiluz

27 junio 2015, 10:12
#2

Gracias Javier, me ayudó tu consejo, lo conseguí. Al inicio me salía error pero el problema era otorgar permisos a la carpeta para crear el archivo.

@DavidQuispeG

29 junio 2015, 2:57