在控制器中获取环境值

Get environment value in controller

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

IMAP_HOSTNAME_TEST=imap.gmail.com
IMAP_USERNAME_TEST=myemail@gmail.com
IMAP_PASSWORD_TEST=mypw

现在我想在我的控制器中使用它们。我试过了,但没有任何结果:

$hostname = config('IMAP_HOSTNAME_TEST');

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

当您的应用程序收到请求时,.env 文件中列出的所有变量都将加载到 $_ENV PHP 超全局变量中。 Check out the Laravel configuration page.

$_ENV['yourkeyhere'];

试试:

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

您可以使用此格式(已在 Laravel 5.5 上测试)。在我的例子中,我用它来获取数据库连接的数据并在控制器上使用:

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

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

您的 .env 文件可以是相同的:

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

DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild

在控制器中

$hostname = $_ENV['IMAP_HOSTNAME_TEST']; (or) $hostname = env('IMAP_HOSTNAME_TEST');

在blade.view

{{$_ENV['IMAP_HOSTNAME_TEST']}}

它在 Laravel 5.3+ 中不起作用,如果你想尝试从控制器访问值,如下所示。它总是 returns null

<?php

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

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

文件values.php

<?php

    return [

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

        // Add other values as you wish

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

<?php

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

其中“values”是文件名后跟键“myvalue”。

最好将配置变量放在配置文件中。

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

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

并通过

引用它们
config('mail.imap_hostname')

它首先尝试获取 .env 文件中的配置变量值,如果在 .env[= 中找不到变量值24=]文件,它会从文件config/mail.php.

中获取变量值

为了简化:只有配置文件可以访问environment variables - 然后传递它们。

步骤 1.) 将变量添加到 .env 文件中,例如,

EXAMPLE_URL="http://google.com"

步骤 2.)config 文件夹中创建一个新文件,名称任意,例如,

config/example.php

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

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

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

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

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

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

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

最后,提交更改:

php artisan config:cache

--- 重要 --- 创建 [=] 后记得在控制台中输入 php artisan config:cache 53=] 文件。配置文件和变量已缓存,因此如果您进行更改,则需要刷新该缓存 - 这同样适用于正在更改/添加的 .env 文件。

您不能像这样访问环境变量。

在你写的.env文件里面

IMAP_HOSTNAME_TEST=imap.gmail.com  // I am okay with this

接下来,在 config 文件夹中有一个文件 mail.php。您可以使用此文件进行编码。当您使用邮件功能时。您也可以使用其他文件。

return [

//..... other declarations
'imap_hostname_test' => env('IMAP_HOSTNAME_TEST'),
// You are hiding the value inside the configuration as well

];

您可以使用 'config( 从控制器调用变量。 无论您在 config 文件夹中使用什么文件。您需要使用那个 file name (without extension) + '.' + 'variable name' + ')'。在当前情况下,您可以按如下方式调用变量。

$hostname = config('mail.imap_hostname_test');

由于在mail.php里面声明了变量,变量名是imap_hostname_test,所以需要这样调用。如果你在 app.php 中声明这个变量,那么你应该调用

$hostname = config('app.imap_hostname_test');

正如@Rajib 所指出的,您无法使用 config('myVariable')

访问环境变量
  1. 您必须先将变量添加到 .env 文件中。
  2. 将变量添加到 config 目录中的某个配置文件。我一般加到config/app.php
  3. 完成后,将使用 Config Facade
  4. Config::get('fileWhichContainsVariable.Variable'); 一样访问它们

可能您必须使用 php artisan config:clear 清除配置缓存 和 您还必须重新启动服务器。

在 config/app.php 文件中创建一个环境变量实例,如 'name' => env('APP_NAME', 'Laravel') & 在你的控制器中称它为 config('app.name')

运行 遵循命令 php artisan config:cache php artisan cache:clear 如果它不起作用。

在 Matt Stauffer 的书中,他建议在您的 config/app.php 中创建一个数组来添加变量,然后在您引用它的任何地方使用:

$myvariable = new Namearray(config('fileWhichContainsVariable.array.ConfigKeyVariable'))

尝试过这个解决方案吗?好吗?

您可以将该值添加到您的 .env 文件中

 VALUE=somevalue
on the controller 
$_ENV['VALUE']
or
env('VALUE')

如果它不起作用,运行这个命令

php artisan config:clear

接受的答案在 Laravel 5.2 版本之后不再有效:

要在控制器或(laravel 项目中的任何 php 文件)中获取环境值,您有两种情况:

案例 1(预定义键):如果您需要从 Laravel 项目创建的 .env 文件中获取值(默认 .env 文件), 或者通过你已经安装的第三方插件,并按照正确的安装程序安装,请参阅此答案以获取解释:

案例 2(未预定义 密钥 - 如果您需要生成新的自定义环境密钥):按照以下说明进行操作:

  1. .env 文件中添加您的自定义密钥,例如我将添加此密钥:

UNIFONIC_APP_ID=xx2Erdasd7Ik7XfdesfaV9HX47 2. Add new php file in laravel_root/config folder, for example i will add this file config/custom.php and its contents like this:

return [

    'unifonic_id' => env('UNIFONIC_APP_ID' , 'Here Default value will used of UNIFONIC_APP_ID not defined in .env file'),

];
  1. 运行 终端中的这些拖曳命令:
php artisan config:clear
php artisan config:cache
  1. 现在,在任何 php 文件(控制器、模型、视图等)中,您都可以调用此函数:

config('custom.unifonic_id');

其中custom是在step 2中生成的php文件的名称,unifonic_id是在step 2中定义的数组的键

如果 .env 中定义的 UNIFONIC_APP_ID,这将 return 值,如果不存在,将 return 配置文件中定义的默认值 in step 2

Note 1: config file can return multi dimensions array, take look for structers of config files which located in laravel_root/config folder.

Note 2: you can modify file laravel_root/config/services.php insted of create new config file...