Cómo garantizar que las variables de entorno estén configuradas en Laravel

  • Publicado el 30 agosto, 2024
  • Palabras: 409

Hace poco estuve navegando por la web y vi un interesante consejo de código de Ash Allen (@AshAllenDesign) sobre un método que no sabía que existía en Laravel. Por eso, traduje su artículo para compartirlo con todos para que también puedan beneficiarse de él.

Cómo garantizar que las variables de entorno estén configuradas en Laravel

#Uso del método Env::getOrFail

 

El método Env::getOrFail fue aportado en septiembre de 2023 por Lucas Michot en PR #48261 y se fusionó con Laravel 10. ¡Gracias por la increíble contribución, Lucas!

 

Veamos un ejemplo del uso de este método en sus aplicaciones Laravel.

 

Imagina que quieres enviar correos electrónicos desde tu aplicación Laravel usando Mailgun. Como parte de la configuración, deberás agregar tu dominio y secreto de Mailgun a tu archivo .env. Normalmente, puedes hacer esto definiendo las siguientes claves en tu archivo config/services.php:

 

return [
 
    // ...
 
    'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN'),
        'secret' => env('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
        'scheme' => 'https',
    ],
];

 

Como podemos ver, estamos intentando leer las variables de entorno MAILGUN_DOMAIN, MAILGUN_SECRET y MAILGUN_ENDPOINT. Si estas claves no están en el archivo .env, se devolverá un valor nulo para estos valores. Con el tiempo, esto provocará un error cuando intentemos enviar el correo electrónico. Pero preferiríamos detectar este error lo antes posible en el ciclo de vida de la solicitud.

 

Podemos usar el método Env::getOrFail para asegurarnos de que estas claves existan en el archivo .env. Si falta la variable de entorno, se lanzará una excepción \RuntimeException. De esta manera, podemos detectar el error de forma temprana y solucionarlo antes de que cause problemas. Para usar esto, solo necesitamos cambiar el asistente de entorno por Env::getOrFail:

 

use Illuminate\Support\Env;
 
return [
 
    // ...
 
    'mailgun' => [
        'domain' => Env::getOrFail('MAILGUN_DOMAIN'),
        'secret' => Env::getOrFail('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
        'scheme' => 'https',
    ],
];

 

Como podemos ver en el ejemplo anterior, hemos actualizado nuestro archivo de configuración config/services.php para aplicar la existencia de las variables de entorno MAILGUN_DOMAIN y MAILGUN_SECRET. Si faltan estas claves, se lanzará una excepción \RuntimeException con el siguiente mensaje:

 

Environment variable [MAILGUN_DOMAIN] has no value.

 

También habrás notado que aún podemos usar la función auxiliar env para la clave MAILGUN_ENDPOINT. Esto se debe a que proporcionamos un valor predeterminado para esta clave (el método Env::getOrFail no admite valores predeterminados). Si la clave MAILGUN_ENDPOINT no se encuentra en el archivo .env, Laravel usará el valor predeterminado de api.mailgun.net.

Antonio Jenaro

Antonio Jenaro

Web Developer

Fuente: Ash Allen Design

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión