Cómo manejar correctamente la configuración en Laravel
— laravel, php, config, env — 2 minutos de lectura

Si has trabajado con Laravel, probablemente hayas usado env()
para obtener valores del archivo .env
. También es probable que hayas visto config()
en acción. Pero, ¿sabes cuándo usar cada uno? Elegir incorrectamente puede causar problemas inesperados, especialmente en producción.
¿Por qué no deberías usar env()
directamente?
-
Los valores de
.env
pueden ser reemplazados en producción Entornos como Docker, pipelines de CI/CD o servidores específicos pueden establecer variables de entorno a nivel del sistema que sobrescriban las claves de tu archivo.env
. Esto fue exactamente lo que me pasó: mi clave de API fue reemplazada por una variable externa, y mi aplicación nunca detectó el valor correcto. En lugar de eso, estaba recibiendonull
. -
Laravel almacena en caché la configuración, no
.env
Cuando ejecutasphp artisan config:cache
o cuando el entorno (APP_ENV
) está configurado como producción, Laravel carga todos los valores de configuración una vez y los guarda en un archivo de caché. Después de eso, Laravel ya no revisa el archivo.env
hasta que limpias la caché.Por ejemplo, si usas
env('API_KEY')
en tu código y luego actualizas el archivo.env
, tu aplicación no verá el nuevo valor hasta que limpies la caché de configuración. -
Difícil de mantener y depurar Imagina que necesitas cambiar el nombre de una clave y
env('API_KEY')
está esparcido por todo tu código. Ahora tendrás que buscar y actualizar manualmente cada instancia. Peor aún, si algo deja de funcionar, estarás buscando en todo el proyecto para entender por qué el valor no se está leyendo correctamente.
La forma correcta: Usa config()
La forma adecuada de manejar tu configuración puede ahorrarte mucha frustración. En lugar de llamar a env()
en tu código, almacena todos los valores dependientes del entorno en los archivos de configuración de Laravel.
Aquí te explico cómo hacerlo:
-
Crea un archivo de configuración (o actualiza uno existente) en la carpeta
config
y usaenv()
aquí. Como estaba integrando una API de mensajería, creé un archivoconfig/messaging.php
:1return [2 'api_key' => env('MESSAGING_API_KEY'),3 'webhook_secret' => env('MESSAGING_WEBHOOK_SECRET'),4]; -
Guarda los valores en tu archivo
.env
:1MESSAGING_API_KEY=tu_clave_de_api2MESSAGING_WEBHOOK_SECRET=tu_secreto_webhook -
Ahora, usa
config()
en lugar deenv()
en tu código:1$apiKey = config('messaging.api_key');2$webhookSecret = config('messaging.webhook_secret'); -
Si cambias algún valor en
.env
, limpia la caché de configuración:1php artisan config:clearSi necesitas renombrar una clave, no tendrás que actualizar muchos archivos. Solo modifica
config/messaging.php
y limpia la caché.
Usar config()
en lugar de env()
no solo hace que tu aplicación sea más robusta y fácil de mantener, sino que también evita sorpresas al desplegar en producción. Este pequeño cambio puede ahorrarte horas de debugging y asegurarte de que tu aplicación funcione correctamente en todos los entornos.