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
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
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