在我的.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文件中,我有以下内容:
IMAP_HOSTNAME_TEST=imap.gmail.com
IMAP_USERNAME_TEST=myemail@gmail.com
IMAP_PASSWORD_TEST=mypw
现在我想在我的控制器中使用它们。我尝试了这个,但没有任何结果:$hostname = config('IMAP_HOSTNAME_TEST');
$hostname变量等于null。我如何在控制器中使用这些配置变量?
试着使用:
<?php $hostname = env("IMAP_HOSTNAME_TEST", "somedefaultvalue"); ?>
somedefaultvalue
可以是任何默认值,以防 env
不存在。 - Chetan Ametaenv()
可能会导致意外问题,请参考Grant在此问题上的回答-https://dev59.com/dVsX5IYBdhLWcg3wFsEa#54286878。 - Steve'hostname' = env('IMAP_HOSTNAME_TEST');
- Steven如果你想像下面这样从控制器中尝试访问值,它在 Laravel 5.3+ 中将无法工作。它始终返回 null。
<?php
$value = env('MY_VALUE', 'default_value');
SOLUTION: 相反,您需要在配置文件夹中创建一个名为values.php的文件,然后编写以下代码
<?php
return [
'myvalue' => env('MY_VALUE',null),
// Add other values as you wish
然后使用以下代码在您的控制器中访问该值
<?php
$value = \Config::get('values.myvalue')
“values”是文件名,后面跟着关键字“myvalue”。
values.php
,则在控制器中实际引用它的方式是 $value = config('values.myvalue');
。 - Drew Hammondphp artisan config:cache
命令来提交配置更改。 - Grant.env
文件中,例如:EXAMPLE_URL="http://google.com"
步骤二.) 在config
文件夹内创建一个新文件,可以随意命名,例如,
config/example.php
第三步:在这个新文件里,我添加了一个返回数组,包含该环境变量。
<?php
return [
'url' => env('EXAMPLE_URL')
];
步骤 4.) 因为我将其命名为“example”,所以我的配置“命名空间”现在是 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
--- 重要 --- 在创建example.php文件后,请记得在控制台中输入php artisan config:cache
。配置文件和变量会被缓存,因此如果您进行更改,需要清除缓存 - 同样适用于更改/添加.env
文件。
use Config;
。通过使用 use 语句,您可以为 Illuminate\Support\Facades\Config::class
使用别名 Config
,例如:Config::get('example.url')
。 - Ametadenv()
辅助方法? - CodeConnoisseur当您的应用程序收到请求时,.env
文件中列出的所有变量都将加载到$_ENV
PHP超全局变量中。查看Laravel配置页面。
$_ENV['yourkeyhere'];
.env
文件中获取值的正确和最佳答案。 - endo64Laravel 9
控制器中对我无效。 - Artur Müller Romanov$User = env('DB_USERNAMEchild','');
$Pass = env('DB_PASSWORDchild','');
第二个参数可以为 null,在 DB_USERNAMEchild 为空的情况下设置默认值。
您的 .env 文件可以保持不变:
DB_HOST=localhost
DB_DATABASE=FATHERBD
DB_USERNAME=root
DB_PASSWORD=password
DB_DATABASEchild=ZTEST
DB_USERNAMEchild=root
DB_PASSWORDchild=passwordofchild
config/app.php
还是控制器/视图中?这在 Laravel 5.2
上对我有效,但在 Laravel 5.3+
上似乎不行。既然你指定了 Laravel 5.5
,那么我一定做错了什么? - Wouter Vanherck将配置变量放入配置文件是一个更好的主意。
在您的情况下,我建议将变量放入 config/mail.php 文件中,例如:
'imap_hostname' => env('IMAP_HOSTNAME_TEST', 'imap.gmail.com')
参考它们的方法是
config('mail.imap_hostname')
在 Laravel 5.2
版本之后,被接受的答案不再有效:
要在控制器或 Laravel 项目中的任何 PHP 文件中获取环境值,您有两种情况:
情况 1(预定义键):如果您需要从 Laravel 项目创建的 .env
文件或已安装并按照正确的安装程序进行了设置的第三方插件中获取值,请参见此答案进行解释:https://dev59.com/HFgQ5IYBdhLWcg3wJgiO#69707775
情况 2(非预定义键 - 如果您需要生成新的自定义环境键):请按照以下说明操作:
1- 在 .env
文件中添加您的自定义键。例如,我将添加此键:
UNIFONIC_APP_ID=xx2Erdasd7Ik7XfdesfaV9HX47
2- 在 laravel_root/config
文件夹中添加一个新的 php 文件,例如我将添加这个文件 config/custom.php
,其内容如下:
return [
'unifonic_id' => env('UNIFONIC_APP_ID' , 'Here Default value will used of UNIFONIC_APP_ID not defined in .env file'),
];
3- 在终端中运行以下两个命令:
php artisan config:clear php artisan config:cache
4 - 现在,在任何php文件(控制器,模型,视图等)中,您都可以调用此函数:
config('custom.unifonic_id');
其中custom
是在步骤2
中生成的php文件的名称,unifonic_id
是在步骤2
中定义的数组的键。
如果在.env
中定义了UNIFONIC_APP_ID
,则会返回该值,否则将返回在配置文件步骤2
中定义的默认值。
注意1:配置文件可以返回多维数组,请查看位于
laravel_root/config
文件夹中的配置文件结构。
注意2:您可以修改文件
laravel_root/config/services.php
而不是创建新的配置文件...
正如@Rajib指出的,您无法使用config('myVariable')
来访问您的环境变量。
config
目录中的某个配置文件中。我通常会添加到config/app.php
文件中。Config
Facade来访问它们,例如:Config::get('fileWhichContainsVariable.Variable');
可能需要使用php artisan config:clear
清除配置缓存,并且您还需要重启服务器。
.env
文件中。 VALUE=somevalue
on the controller
$_ENV['VALUE']
or
env('VALUE')
如果它不能正常工作,运行这个命令。
php artisan config:clear
在控制器中
$hostname = $_ENV['IMAP_HOSTNAME_TEST']; (or) $hostname = env('IMAP_HOSTNAME_TEST');
在 blade.view 中
{{$_ENV['IMAP_HOSTNAME_TEST']}}