Laravel 5 - env ​​() siempre devuelve nulo

80

Intento descubrir por qué mi env()ayudante siempre regresa null. Esto causa problemas, especialmente en el app.phparchivo, donde los env()ayudantes se utilizan ampliamente de forma predeterminada. ¿Quizás alguna configuración de servidor misteriosa?

Mi archivo env :

APP_ENV=production
APP_KEY=base64:mymagickey=
APP_DEBUG=false
APP_LOG_LEVEL=info
APP_URL=http://www.example.com

etc...

EDITAR - Intenté seguir :

php artisan cache:clear
php artisan view:clear
php artisan config:cache

y por supuesto, estoy usando un envayudante como este:env('APP_ENV')

Pero aún sin éxito. La parte extraña es que la $_ENVvariable php contiene todas las variables del .envarchivo.

Fusión
fuente

Respuestas:

179

env(...)La función no funcionará después de almacenar en caché el archivo config. (a partir de laravel 5.2 hasta la actual 5.7)

La documentación de Laravel dice

Si está utilizando el config:cachecomando durante la implementación, debe asegurarse de que solo está llamando a la envfunción desde sus archivos de configuración y no desde cualquier otro lugar de su aplicación.

Entonces la respuesta correcta sería

Si llama a env desde dentro de su aplicación, se recomienda encarecidamente que agregue los valores de configuración adecuados a sus archivos de configuración y llame a env desde esa ubicación, lo que le permite convertir sus llamadas de env en llamadas de configuración.

Y lo cité de la misma documentación.

Pero para una solución rápida, esto servirá:

php artisan config:clear

Y ahora debería quedar claro por qué, cuando lo intentó config:cache, no ayudó, a pesar de que borra la configuración antes del almacenamiento en caché.

Yevgeniy Afanasyev
fuente
Gracias, php artisan config:cleares lo único que funcionó para que mis credenciales de AWS SES se leyeran.
Joe Scotto
2
Así que creo que no deberíamos usar directamente algo como env('APP_ENV') en nuestra aplicación. En su lugar, debemos escribir una línea en config/app.php: 'env' => env('APP_ENV'),. Entonces, la usamos en nuestro código: config('app.env').
Cosmos
43

Espero que este comando te salve

php artisan config: claro

sh6210
fuente
23

Los cinco comandos más importantes si su Laravel no funciona como se esperaba después de algunas modificaciones en .env o la carpeta de la base de datos o debido a cualquier otra modificación. Aquí hay una explicación completa: https://www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload
Aprendiz
fuente
el mismo problema aquí .... no funciona env (). He intentado eliminar la caché, composer dump-autoload .... etc. Estoy usando laravel 5.5.44 y tengo que llamar a la configuración desde el archivo .env con \ Config :: get ()
calin24
He enumerado todos los comandos en un lugar que necesita ejecutar para eliminar cualquier tipo de problema de caché con el archivo env o la configuración, etc. Aquí está el hilo: stackoverflow.com/a/43041479/6935763 Por favor, ejecútelos todos y déjeme saber si todavía no funciona.
Estudiante
2
correr solo php artisan config:cacheno funciona. Después de ejecutarlo php artisan config:clearfunciona. Ahora puedo usar nuevamente env ($ key). Thx @Learner
calin24
Leí su discusión y puse mi explicación en la respuesta separada, por favor revísela.
Yevgeniy Afanasyev
14

Úselo en \Config::get('app.env');lugar de env(APP_ENV);porque eventualmente obtendrá el mismo error y eso no es bueno para un sitio web en vivo.

Si desea agregar variables personalizadas desde su ENV, vaya a su aplicación de configuración y busque esto:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),

agregue una nueva línea debajo de " 'env' => env('APP_ENV', 'production'),", por ejemplo, podría ser lo siguiente:

/*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services your application utilizes. Set this in your ".env" file.
    |
    */

'env' => env('APP_ENV', 'production'),
'key' => env('APP_KEY'),

Puede llamar a la variable "clave" así:

\Config::get('app.key');

Siempre que agregue una nueva variable como "clave" al entorno de la aplicación, deberá usarla config:cachepara restablecer el caché.

DIGITAL CRIMINAL
fuente
No estoy seguro, pero es posible que este error solo se produzca en Windows. pero su solución también lo resolvió en Windows. ¿Funcionará en el entorno de producción de Linux?
Amit Shah
@AmitShah, no es un error, es una característica. Consulte mi respuesta para obtener más detalles.
Yevgeniy Afanasyev
13

El siguiente comando funcionó para mí. Accidentalmente borré todos los archivos de caché, por env('something')lo que devolvía nulo.

php artisan optimize:clear
Santosh Kumar
fuente
10

Es un error conocido ".env" que se puede solucionar con:

php artisan config:cache
vpdeva
fuente
16
Algunos usuarios pueden necesitar hacer php artisan config: clear en su lugar
DIGITALCRIMINAL
6
Laravel 5.5 Tuve que ejecutar 'php artisan config: clear'. Gracias
dacastro4
4
php artisan config: cache es la razón por la que los valores de env () son nulos. Si desea almacenar en caché sus variables de configuración y env, entonces no debe usar env () en ningún otro lugar excepto en los archivos de configuración porque una vez almacenado en caché, env () siempre devolverá nulo. Aunque ahora también veo que config () y Config :: get () helper devuelven nulo después del almacenamiento en caché, lo cual también es extraño.
BRBdot
siga lo anterior - ... Entonces, ahí es cuando debe darse cuenta de que config () helper tampoco puede acceder directamente a los valores en .env. Deberá crear o usar config / <insertar nombre de archivo de configuración> .php archivo de configuración y crear su entrada de configuración desde .env y luego usar ese valor asignado.
BRBdot
1

Si la respuesta aceptada no soluciona el problema, compruebe si el archivo .env tiene el permiso de lectura y escritura correcto. Si el marco / biblioteca no puede leer el archivo, los valores siempre serán nulos. Me encontré con este problema en uno de mis proyectos de Lumen, pero después de cambiar los permisos de archivo funcionó.

Sachithd
fuente
0

Sé que este es un hilo muy antiguo y la razón puede no ser la misma. Pero a mí me pasó lo mismo.

La razón fue que tuve un problema dentro del archivo .env. Esto es lo que tengo en .env

TEST="e@1asa

Observe que falta la cita final. Y debería ser como,

TEST="e@1asa"

Todas las variables env que agregué después devolvieron nulas debido a este error.

Ni siquiera nada escrito en el registro de errores. Entonces, si se ha encontrado con este error, intente agregar una variable env de ejemplo como primer registro del archivo . Si funciona y el registro finalmente no funciona , puede haber un error dentro de .env

Aruna Perera
fuente
0

Coloque el archivo .env en la carpeta raíz del proyecto

Agréguelos al archivo app.php.

try {
    (new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
    echo $e;
}
Thushara Buddhika
fuente