Hola, todavía soy un poco novato con Symfony y muchas veces con tal de no comerme la cabeza hago cosas que estoy seguro se pueden hacer de forma más correcta.
En el proyecto que estoy haciendo necesito una carpeta con PDFs. Estos archivos los generará la propia aplicación, y después serán accedidos desde la web.
Los he ubicado en:
/var/www/html/miproyecto.com/src/MiProyecto/MiBundle/Resources/pdf_files/
De momento, cuando accedo a ellos a través del controlador tanto para generarlos como para mostrarlos, pongo la dirección entera, pero me gustaría saber donde ponerlo de forma similar a una variable global para poder acceder a la ruta de forma más fácil, tipo $rutaPDF o algo así. He estado mirando para ponerlo en config.yml pero me da algunos fallos.
Muchas gracias!!!
Respuestas
Antes de responder a tu pregunta, sería necesario saber si esos archivos PDF:
- Son accesibles públicamente o son privados.
- Son generados dinámicamente o una vez generados se guardan tal cual para siempre.
@javiereguiluz
Serán accesibles públicamente. Se generan una vez y no deberían volver a tocarse aunque se tocarán para corregir errores, y cada vez que se toque se borrará el anterior y se generará uno nuevo.
En cualquier caso lo que necesito saber es donde guardar rutas (en este caso a los PDFs) para una vez que cambie la aplicación a producción o a otro servidor, no tener que ir cambiando dicha ruta en todos sitios donde la haya utilizado.
Gracias de nuevo.
@antoniocarvajal
Si son accessibles públicamente, y por tanto no hay que protegerlos de ninguna manera, lo mejor sería colocarlos en la carpeta web/uploads/pdf_files/
.
Así que puedes definir esta ruta en el archivo app/config/config.yml
(no lo definas en app/config/parameters.yml
ya que se supone que esta ruta no depende de la máquina donde esté instalada la aplicación):
# app/config/config.yml parameters: app.pdf_path: %kernel.root_dir%/../web/pdf_files
Después, en un controlador lo usas así:
// Symfony 2.5 y anterior $ruta = $this->container->getParameter('app.pdf_path').'/'.$nombreArchivo; // Symfony 2.6 y posterior $ruta = $this->getParameter('app.pdf_path').'/'.$nombreArchivo;
Lo mejor es que si defines un "paquete de assets", tus plantillas van a quedar muy limpias. Primero defines el paquete:
# Symfony 2.6 y anterior framework: templating: assets: packages: pdf: base_urls: '/uploads/pdf_files' # Symfony 2.7 y posterior framework: assets: packages: pdf: base_path: '/uploads/pdf_files'
Y luego en tus plantillas haces esto:
<a href="{{ asset(nombreArchivo, 'pdf') }}">Ver archivo</a>
Si nombreArchivo
es documento1.pdf
, el enlace generado será:
<a href="/uploads/pdf_files/documento1.pdf">Ver archivo</a>
@javiereguiluz