获取控制器中的环境值

nie*_*lsv 33 php config laravel laravel-5.1

在我的.env文件中,我有以下内容:

IMAP_HOSTNAME_TEST=imap.gmail.com
IMAP_USERNAME_TEST=myemail@gmail.com
IMAP_PASSWORD_TEST=mypw
Run Code Online (Sandbox Code Playgroud)

现在我想在我的控制器中使用它们.我试过这个,但没有结果:

$hostname = config('IMAP_HOSTNAME_TEST');
Run Code Online (Sandbox Code Playgroud)

$ hostname变量等于null.如何在控制器中使用这些配置变量?

Che*_*eta 54

尝试一下

<?php $hostname = env("IMAP_HOSTNAME_TEST", "somedefaultvalue"); ?>
Run Code Online (Sandbox Code Playgroud)

  • 不适用于 Laravel 5.5。请往下寻找 Masum Ahmed Sarkar 的答案 (3认同)
  • 使用`env()`可能会导致意外问题,请参阅Grant对此问题的解答-/sf/ask/2398417521/#54286878。 (2认同)

Mas*_*kar 45

如果您想尝试从控制器访问值,如果在Laravel 5.3+中不起作用,则返回null

<?php

$value=env('MY_VALUE','default_value');
Run Code Online (Sandbox Code Playgroud)

解决方案:您需要在config文件夹..say values.php中创建一个文件,然后编写如下代码

values.php

<?php

return [

    'myvalue' => env('MY_VALUE',null),

    //add other values as you want

]
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码访问控制器中的值

<?php


$value=\Config::get('values.myvalue')
Run Code Online (Sandbox Code Playgroud)

其中"凭证"是文件名后跟"myvalue"键希望它有所帮助

  • 不要忘记使用php artisan config:cache来提交配置更改。 (7认同)
  • 不确定为什么这是低估的...这是L5.3 +的正确答案(大多数情况下).但是使用`values.php`的示例文件名,你实际上在控制器中引用它作为`$ value = config('values.myvalue');` (6认同)

Gra*_*ant 17

我想添加一个答案,以简化过去所说的话。只有配置文件可以访问env变量-然后将其传递。

步骤1.)将变量添加到.env文件中。

EXAMPLE_URL="http://google.com"
Run Code Online (Sandbox Code Playgroud)

第2步。)config文件夹内创建一个新文件,可以使用任何名称,即。

config/example.php
Run Code Online (Sandbox Code Playgroud)

步骤3.)在这个新文件的内部,我添加了一个返回的数组,其中包含该env变量。

<?php
return [
  'url' => env('EXAMPLE_URL')
];
Run Code Online (Sandbox Code Playgroud)

步骤4.)因为我将其命名为“ example”,所以我的配置“ namespace”现在为example。所以现在,在我的控制器中,我可以使用以下命令访问此变量:

$url = \config('example.url');
Run Code Online (Sandbox Code Playgroud)

提示 -如果use Config;在控制器的顶部添加,则不需要反斜杠(用于指定根名称空间)。就是

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

class ExampleController extends Controller
{
    public function url() {
        return config('example.url');
    }
}
Run Code Online (Sandbox Code Playgroud)

---重要---php artisan config:cache创建完example.php文件后,请记住进入控制台。配置文件和变量被缓存,因此,如果您进行更改,则需要刷新该缓存-这同样适用于.env要更改/添加到的文件。

  • config() 是辅助函数,不需要 `use Config;`。通过 use 语句,您可以将别名“Config”用于“Illuminate\Support\Facades\Config::class”,例如:“Config::get('example.url')” (2认同)

Cle*_*ode 14

当您的应用程序收到请求时,.env文件中列出的所有变量都将加载到$_ENVPHP超全局变量中 . 结帐laravel配置页面

$_ENV['yourkeyhere'];
Run Code Online (Sandbox Code Playgroud)


Zar*_*las 6

您可以使用这种格式(在 Laravel 5.5 上测试)。就我而言,我用它来获取数据库连接的数据并在控制器上使用:

$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');
Run Code Online (Sandbox Code Playgroud)

第二个参数可以为空,或者在 DB_USERNAMEchild 为空的情况下设置任何默认值。

您的 .env 文件可以相同:

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

DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild
Run Code Online (Sandbox Code Playgroud)


Ham*_*ami 5

将配置变量放在配置文件中是一个更好的主意。

在您的情况下,我建议将您的变量放在config/mail.php 中,例如:

'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')
Run Code Online (Sandbox Code Playgroud)

并通过

config('mail.imap_hostname')
Run Code Online (Sandbox Code Playgroud)

它首先试图获得在配置变量值.ENV文件,如果它不能找到在变量值.ENV文件,它将会从文件中的变量值配置/ mail.php