Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/10/2015, 09:16
barrera1997
 
Fecha de Ingreso: octubre-2015
Mensajes: 11
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Symfony2: Pasar Valores/Parámetros entre Actions en un mismo controlador

Buenas tardes:

Mi aplicación consiste en generar un formulario donde el usuario introducirá valores en distintos campos. Si el formulario es válido, se ejecutará una búsqueda contra MongoDB de acuerdo filtrando por los valores introducidos en el formulario. El siguiente paso es redendizar para presentar los datos que ha devuelto la búsqueda contra MongoDB. En esa redendización, tengo un botón para exportar a un fichero en formato CSV/Excel/JSON los datos devueltos por la búsqueda contra MongoDB. Es en este paso donde no sé cómo pasar al Action de Exportación los datos devueltos por la búsqueda contra MongoDB. Necesitaría exportar y paginar el resultado de la query contra MongoDB.

En el Controlador DefaultController.php codifico:
class DefaultController extends Controller {
//.....
public function searchSumarioBOEAction (Request $request)
{
//Inicio de searchSumarioBOEAction
//....
$sumarioBOE=new boe1();
$form = $this->createForm(new searchSumarioBOEType(), $sumarioBOE, array ('method' => 'GET',));
$form->handleRequest($request);
//......
if ($form->isValid()) {
$datos= //Ejecutar Query contra MongoDB
return $this->render('jbdMEBIBD2015FEBBundle:Default:resultado. html.twig', array('datos' => $datos));
}
//...
//Fin de searchSumarioBOEAction
}

public function generateCsvAction($datos)
{
//Código para exportar a CSV los $datos obtenidos tras Ejecutar Query contra MongoDB
//....
//....
}
}

La plantilla twig resultado.html.twig es:

{% block body %}
<a href="{{ path('generateCsv', {'datos': datos}) }}">Export as Excel</a>
{# table body #}
{% for dato in datos %}
{% if dato.item is not null%}
<table>
<tr>
<td><h2><a href="http://www.boe.es{{dato.urlPdf}}">{{ dato.item }}</a></h2></td>
</tr>
<tr>
<td>Fecha: {{dato.fechaPub }}</td>
</tr>
<tr>
<td>Departamento: {{dato.departamento }}</td>
</tr>
<tr>
<td>Sección: {{dato.NombreSeccion }}</td>
</tr>
<tr>
<td>Epígrafe: {{dato.epigrafe }}</td>
</tr>
<tr>
<td>Título: {{ dato.titulo }}</td>
</tr>
</table>
{% endif %}
{% else %}
<table>
<tr>
<td>No hay resultados.</td>
</tr>
</table>
{% endfor %}
{% endblock %}

El fichero routing.yml es el siguiente:

searchBOE:
path: /searchSumarioBOE
defaults: { _controller: jbdMEBIBD2015FEBBundle:Default:searchSumarioBOE }
generateCsv:
pattern: /generateCsv
defaults: {_controller: jbdMEBIBD2015FEBBundle:Default:generateCsv }

¿Cómo puedo pasar un parámetro entre 2 Actions de un mismo controlador en Symfony? Es decir, ¿cómo puedo pasar el valor $datos entre el Action searchSumarioBOEAction y el Action generateCsvAction? El Action generateCsvAction se ejecutará cuando el usuario pulse sobre el botón de Exportar a Excel después de la redendización de searchSumarioBOEAction. Necesitaría exportar y paginar el resultado de la query contra MongoDB.

Por otra parte, ¿me recomiendas algún bundle para realizar la exportación de los datos (exportar a csv, excel, json, ....)?

Muchas gracias.

Un saludo.