Nuevo en Symfony 4.3: Procesado de URLs en variables de entorno

Cuando se utilizan variables de entorno para configurar aplicaciones Symfony resulta común usar URLs para definir valores de tipo DSN como el siguiente:

# .env
MONGODB_URL="mongodb://db_user:[email protected]:27017/db_name"

Sin embargo, a veces tienes que acceder a alguna parte de la URL para definir el valor de otras opciones (por ejemplo, el número del puerto o el nombre de la base de datos). En Symfony 4.3 hemos añadido dos nuevos procesadores de variables de entorno llamados url y query_string que te pueden ayudar en esos casos.

El procesador url parsea la URL guardada en la variable de entorno indicada y devuelve un array asociativo con sus partes, por lo que puedes combinarlo con el procesador key:

# config/packages/mongodb.yaml
mongo_db_bundle:
    clients:
        default:
            # ...
            username: '%env(key:user:url:MONGODB_URL)%'
            password: '%env(key:pass:url:MONGODB_URL)%'
    connections:
        default:
            database_name: '%env(key:path:url:MONGODB_URL)%'

El procesador query_string parsea la parte de la query string de la URL y devuelve un array asociativo con sus parámetros y valores, por lo que en este caso también puedes combinarlo con el procesador key. Si la variable de entorno es la siguiente:

# .env
MONGODB_URL="mongodb://db_user:[email protected]:27017/db_name?timeout=3000"

Puedes obtener el valor del parámetro timeout de la query string de la siguiente manera:

# config/packages/mongodb.yaml
mongo_db_bundle:
    clients:
        default:
            # ...
            connectTimeoutMS: '%env(int:key:timeout:query_string:MONGODB_URL)%'

Esta funcionalidad fue contribuida por Jérémy Derussé en el pull request #28975.

Fuente: New in Symfony 4.3: URL Env Var Processor

Comentarios

Publicada el

7 de mayo de 2019

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.