Php 在控制器中获取环境值

Php 在控制器中获取环境值,php,laravel,laravel-5,config,Php,Laravel,Laravel 5,Config,在我的.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文件中,我有以下内容:

IMAP_HOSTNAME_TEST=imap.gmail.com
IMAP_USERNAME_TEST=myemail@gmail.com
IMAP_PASSWORD_TEST=mypw
现在我想在我的控制器中使用它们。我尝试过这个,但没有任何结果:

$hostname = config('IMAP_HOSTNAME_TEST');

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

当应用程序收到请求时,
.env
文件中列出的所有变量都将加载到
$\u env
PHP超级全局中

尝试以下方法:

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

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

$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');
第二个参数可以为null,或者在DB_USERNAMEchild为null的情况下设置任何默认值

您的.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');
在刀片服务器视图中

{{$_ENV['IMAP_HOSTNAME_TEST']}}
如果您想尝试从如下控制器访问值,它在Laravel 5.3+中不起作用。它总是返回空值


最好将配置变量放入配置文件中

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

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

config('mail.imap_hostname')

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

中获取变量值,以简化:只有配置文件可以访问,然后再传递它们

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

EXAMPLE_URL="http://google.com"
config/example.php
namespace App\Http\Controllers;
use Config; // Added this line

class ExampleController extends Controller
{
    public function url() {
        return config('example.url');
    }
}
步骤2。)
config
文件夹中创建一个新文件,例如,使用任何名称

EXAMPLE_URL="http://google.com"
config/example.php
namespace App\Http\Controllers;
use Config; // Added this line

class ExampleController extends Controller
{
    public function url() {
        return config('example.url');
    }
}
步骤3。)在这个新文件中,我添加了一个返回的数组,其中包含该环境变量

<?php
return [
  'url' => env('EXAMPLE_URL')
];
提示-如果添加
请使用配置
在控制器顶部,不需要反斜杠(指定根命名空间)。比如说,

EXAMPLE_URL="http://google.com"
config/example.php
namespace App\Http\Controllers;
use Config; // Added this line

class ExampleController extends Controller
{
    public function url() {
        return config('example.url');
    }
}
最后,提交更改:

php artisan config:cache

---重要---创建example.php文件后,请记住在控制台中输入
php artisan config:cache
。配置文件和变量是缓存的,因此如果进行更改,则需要刷新该缓存-这同样适用于正在更改/添加到的
.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

];
您可以使用
配置(
)从控制器调用变量。 在配置文件夹中使用的任何文件。您需要使用该
文件名(不带扩展名)+'.+'变量名'+')
。在当前情况下,可以按如下方式调用变量

$hostname = config('mail.imap_hostname_test');
由于您在mail.php中声明了变量,并且变量名为
imap\u hostname\u test
,因此需要这样调用它。如果在
app.php
中声明此变量,则应调用

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

正如@Rajib指出的,您不能使用
config('myVariable')

  • 必须首先将变量添加到.env文件中
  • 将变量添加到
    config
    目录中的某个配置文件中。我通常添加到
    config/app.php
  • 完成后,将访问它们,如
    Config::get('fileWhichContainsVariable.Variable')使用
    Config
    Facade

  • 您可能需要使用
    php-artisan-config:clear

    您还必须重新启动服务器。

    在config/app.php文件中创建一个env变量的实例,如
    'name'=>env('app_name','Laravel')
    &在您的控制器中,像
    config('app.name')


    运行以下命令
    php artisan config:cache
    php artisan cache:clear
    ,如果它不起作用。

    在马特·斯塔夫的书中,他建议在
    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
    

    如果
    env
    不存在,则
    somedefaultvalue
    的可能重复项可以是任何默认值。使用
    env()
    可能会导致意外问题,请参阅Grant关于此问题的答案-。不适用于Laravel 5.5。请在Laravel 8^的config/app.php文件中找到Masum Ahmed Sarkardd的答案,这是一种简化形式,它会起作用<代码>'hostname'=env('IMAP_hostname_TEST')不确定为什么这被否决。。。这是L5.3+的正确答案(大部分)。但是,使用示例文件名
    values.php
    ,实际上可以在控制器中将其引用为
    $value=config('values.myvalue')
    不要忘记
    php artisan config:cache
    提交配置更改。谢谢大家,这仍然有效。您将此代码、
    config/app.php
    或控制器/视图放在哪里?这在
    laravel5.2
    上对我有效,但在
    laravel5.3+
    上似乎没有效果。由于您指定的是
    Laravel 5.5
    ,我一定是做错了什么?我已将此代码放在app/Http/ExampleController.phpphp artisan config:cache crash my上aplication@FelipeCastillo意味着您的应用程序在其配置中存在问题-因为该命令仅刷新cacheconfig()是helper函数,不需要
    use-Config。使用use语句,您可以将别名
    Config
    用于
    illumb\Support\Facades\Config::class
    例如:
    Config::get('example.url')
    @petermortensen@Grant,这是一个很好的例子