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

Dónde ubicar una ruta visible desde todos los controladores

6 de noviembre de 2015

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

#1

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

6 noviembre 2015, 17:34
#2

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

6 noviembre 2015, 19:02
#3

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

6 noviembre 2015, 20:03