Obtener el valor del entorno en el controlador

1 minuto de lectura

avatar de usuario
nielsv

En mi archivo .env tengo lo siguiente:

IMAP_HOSTNAME_TEST=imap.gmail.com
[email protected]
IMAP_PASSWORD_TEST=mypw

Ahora me gustaría usarlos en mi controlador. He intentado esto, pero sin ningún resultado:

$hostname = config('IMAP_HOSTNAME_TEST');

La variable $hostname es igual a nulo. ¿Cómo puedo usar estas variables de configuración en mi controlador?

  • Posible duplicado de Laravel 4: ¿cómo puedo obtener el valor del entorno?

    – Narendrasingh Sisodia

    14 de diciembre de 2015 a las 9:16

avatar de usuario
Chetán Ameta

Pruébalo con:

<?php $hostname = env("IMAP_HOSTNAME_TEST", "somedefaultvalue"); ?>

  • somedefaultvalue puede ser cualquier valor predeterminado en caso env no existe.

    – Chetán Ameta

    14 de diciembre de 2015 a las 9:34

  • Usando env() puede generar problemas inesperados, consulte la respuesta de Grant sobre esta pregunta: stackoverflow.com/questions/34263107/….

    –Steve

    30 de enero de 2019 a las 12:16


  • No funciona para Laravel 5.5. Baje para encontrar una respuesta por Masum Ahmed Sarkar

    – Hari Harker

    9 de julio de 2019 a las 8:13

  • Agregue una forma reducida de esto en el archivo config/app.php en Laravel 8^ y funcionará. 'hostname' = env('IMAP_HOSTNAME_TEST');

    – Esteban

    8 de diciembre de 2020 a las 12:31


avatar de usuario
Masum Ahmed Sarkar

No funciona en Laravel 5.3+ si desea intentar acceder al valor desde el controlador como se muestra a continuación. siempre devuelve nulo

<?php

    $value = env('MY_VALUE', 'default_value');

SOLUCIÓN: Más bien, debe crear un archivo en la carpeta de configuración, decir valores.php y luego escribir el código como se muestra a continuación

Expediente valores.php

Then access the value in your controller with the following code

<?php

    $value = \Config::get('values.myvalue')

Where "values" is the filename followed by the key "myvalue".

  • Not sure why this was downvoted... It's the correct answer (mostly) for L5.3+. But using your example filename of values.php, you'd actually reference it in the controller as $value = config('values.myvalue');

    – Drew Hammond

    Mar 11, 2018 at 21:00

  • Don't forget to php artisan config:cache to commit config changes.

    – Grant

    Apr 29, 2018 at 13:27

user avatar
Grant

To simplify: Only configuration files can access environment variables - and then pass them on.

Step 1.) Add your variable to your .env file, for example,

EXAMPLE_URL="http://google.com"

Step 2.) Create a new file inside of the config folder, with any name, for example,

config/example.php

Step 3.) Inside of this new file, I add an array being returned, containing that environment variable.

<?php
return [
  'url' => env('EXAMPLE_URL')
];

Paso 4.) Debido a que lo nombré "ejemplo", mi configuración 'espacio de nombres' ahora es un ejemplo. Entonces ahora, en mi controlador puedo acceder a esta variable con:

$url = \config('example.url');

Consejo - si agregas use Config; en la parte superior de su controlador, no necesita la barra invertida (que designa el espacio de nombres raíz). Por ejemplo,

namespace App\Http\Controllers;
use Config; // Added this line

class ExampleController extends Controller
{
    public function url() {
        return config('example.url');
    }
}

Finalmente, confirme los cambios:

php artisan config:cache

--- IMPORTANTE --- Recuerda ingresar php artisan config:cache en la consola una vez que haya creado su archivo ejemplo.php. Los archivos de configuración y las variables se almacenan en caché, por lo que si realiza cambios, debe vaciar ese caché; lo mismo se aplica a la .env archivo que se está cambiando/añadiendo.

  • Configuración artesanal de php: bloqueo de caché de mi aplicación

    –Felipe Castillo

    31 mayo 2019 a las 15:32

  • @FelipeCastillo significa que su aplicación tiene un problema en su configuración, porque ese comando solo vacía el caché

    - Otorgar

    4 de junio de 2019 a las 10:31

  • config() es la función auxiliar y NO necesita el use Config;. Con la declaración de uso puede usar el alias Config por Illuminate\Support\Facades\Config::class como por ejemplo: Config::get('example.url')

    – Ametad

    22 de septiembre de 2020 a las 12:40

  • @petermortensen @Grant, esta es una gran respuesta. Mi pregunta es por qué funciona esto en lugar de simplemente usar laravels env() metodo auxiliar?

    – CodeConnoisseur

    2 de diciembre de 2020 a las 16:49

  • @PA-GW El ayudante env() accede solo a las variables de entorno (a menudo sensibles a la seguridad) almacenadas en el archivo .env. Notará en mi línea de apertura, mencioné que parece que (al menos a partir de la fecha de respuesta a esta pregunta) los archivos de configuración son los únicos archivos que pueden acceder a esos súper globales sensibles.

    - Otorgar

    3 de diciembre de 2020 a las 13:24

avatar de usuario
Basheer Kharoti

Todas las variables enumeradas en .env El archivo se cargará en el $_ENV PHP súper global cuando su aplicación recibe una solicitud. Echa un vistazo a la página de configuración de Laravel.

$_ENV['yourkeyhere'];

avatar de usuario
Zarkys Salas

Puede usar con este formato (probado en Laravel 5.5). En mi caso, lo usé para obtener los datos de las conexiones de la base de datos y usarlo en el controlador:

$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');

El segundo parámetro puede ser nulo o establecer cualquier valor predeterminado en caso de que DB_USERNAMEchild sea nulo.

Su archivo .env puede ser el mismo:

DB_HOST=localhost
DB_DATABASE=FATHERBD
DB_USERNAME=root
DB_PASSWORD=password

DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild

  • ¿Dónde pusiste este código, config/app.php o el controlador/vista? Esto funcionó para mí en Laravel 5.2 pero no parece estar encendido Laravel 5.3+. Ya que estás especificando Laravel 5.5¿Debo estar haciendo algo mal?

    -Wouter Vanherck

    14 de diciembre de 2018 a las 10:45


  • he colocado este código en app/Http/ExampleController.php

    – Zarkys Salas

    30 de mayo de 2019 a las 5:33

avatar de usuario
Pedro Mortensen

Es una mejor idea poner sus variables de configuración en un archivo de configuración.

En su caso, sugeriría poner sus variables en config/correo.php me gusta:

'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')

Y referirse a ellos por

config('mail.imap_hostname')

Primero intenta obtener el valor de la variable de configuración en el .env archivo y si no pudo encontrar el valor de la variable en el .env archivo, obtendrá el valor de la variable del archivo config/correo.php.

  • ¿Dónde pusiste este código, config/app.php o el controlador/vista? Esto funcionó para mí en Laravel 5.2 pero no parece estar encendido Laravel 5.3+. Ya que estás especificando Laravel 5.5¿Debo estar haciendo algo mal?

    -Wouter Vanherck

    14 de diciembre de 2018 a las 10:45


  • he colocado este código en app/Http/ExampleController.php

    – Zarkys Salas

    30 de mayo de 2019 a las 5:33

avatar de usuario
MacTavish

Como señaló @Rajib, no puede acceder a sus variables env usando config('myVariable')

  1. Primero debe agregar la variable al archivo .env.
  2. Agregue la variable a algún archivo de configuración en config directorio. yo suelo añadir a config/app.php
  3. Una vez hecho esto, accederá a ellos como Config::get('fileWhichContainsVariable.Variable'); utilizando el Config Fachada

Probablemente tendrá que borrar el caché de configuración usando php artisan config:clear
Y también tendrá que reiniciar el servidor.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad