在刀片服务器中访问Laravel .env变量


86

我正在尝试获取一些API密钥,这些密钥已存储在.env文件中,可在刀片javascript中使用。我添加了两个键,例如:

APP_ENV=local
APP_KEY=////
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
APP_GOOGLE_MAPS=////
APP_OVERHEID_IO=////

在刀片中,我需要使用Google Maps API和OverheidIO API密钥。我尝试获取默认的.env变量之一,以防万一我格式化自定义.env变量的格式错误。

{{ env('APP.ENV') }} // nothing
{{ env('APP_ENV') }} // nothing
{{ env('APP_ENV'), 'test' }} // returns 'test' 

有人可以帮我在刀片中调用Google Maps API和Overheidio API密钥吗?


12
尝试在修补程序中运行php artisan config:clear和测试env('APP_ENV')。对我来说,它返回local字符串。
Alexey Mezenin

谢谢阿列克谢!php artisan config:clear做到了。
Anna Jeanine

@Alexey Mezenin,如果您以“答案”发表评论,那还不好吗?我对使用SO很陌生,对规则也不是很清楚。
manian


@YevgeniyAfanasyev该问题与我的问题重复,我之前曾问过...
Anna Jeanine

Answers:


109

如果您的Laravel在.env或数据库文件夹中进行了某些修改后或由于其他任何修改而无法按预期工作,则这五个最重要的命令。这是完整的说明:https : //www.youtube.com/watch?v=Q1ynDMC8UGg

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan view:clear
php artisan route:clear

1
有时正是这样的原因,Laravel 5.5具有硬缓存系统
Deepesh Thapa '18

2
好东西,但请注意,env('APP_ENV')将在生产中失败,请参阅stackoverflow.com/a/57626957/4820095
ndberg,

1
@ndberg就是您使用该命令的时间,php artisan config:cache而我没有使用该命令。请阅读。
学习者

嗨,@ ndberg,我仔细审查了您对这个问题的答案(上面评论中的链接),您将其php artisan config:cache称为@Learner。但是,我不确定是否需要对学习者的答案进行编辑以添加缺少的命令,或者您是否输入了错误。请澄清一下。
吉列尔莫·加西亚

@Learner是正确的,他不在回答中使用它,因此不需要。但我只是想为所有googler概述一下:通常在生产中,我们使用config:cache,最终,问题“ env('APP.ENV')”中使用的调用会带来麻烦。因此,这只是该答案的补充。
ndberg


15

很重要

所有的env()如:在生产环境中env('APP_ENV')调用“将无法工作”(使用时php artisan config:cache

使用什么?
-仅在配置文件中使用env()
-使用App :: environment()检查环境(.env中的APP_ENV)。
-将config('app.var')用于所有其他环境变量,例如。config('app.debug')
-为您自己的ENV变量创建自己的配置文件。示例:
在您的.env中:

MY_VALUE=foo

例子config app / myconfig.php

return [
    'myvalue' => env('MY_VALUE', 'bar'), // 'bar' is default if MY_VALUE is missing in .env
];

访问您的代码:

config('myconfig.myvalue') // will result in 'foo'

更多详细信息,请点击这里


@ndberg在这里说的是关键:use env() only in config files。这是对这个问题的最佳答案。
Pathros

8

如果要获取应用程序的环境,请尝试以下操作:

{{App::environment()}}

我没有尝试其他变量。


4

在config /文件夹以外的任何其他地方使用env()会导致问题。在其中使用env,然后在应用程序的其他部分使用config()


4

您应该只.env直接在配置文件中访问值,然后使用config()帮助程序 从配置文件中的所有位置(控制器,视图)访问它们,

例如:

.env

TEST_URL=http://test

config / app.php

return [
   'test_url' => env('TEST_URL','http://default.url')
];

资源/视图/welcome.blade.php

{{ config('app.test_url')}}

有关更多信息,请参见laravel文档中的配置缓存




1

在此处获取值:config/app.php


在blade中:

{{ config('app.name', 'default value here') }}

在班级/控制器中:

config('app.name', 'default value here')


0

我也很难从.env文件中获取价值,然后我做到了,它有所帮助:

  1. 检查env文件,看看是否提供了正确的值。
  2. 然后从.env文件中检查在哪里使用该变量的刀片服务器或控制器。
  3. 如果以上两个步骤都正确,则只需执行以下步骤-

php artisan配置:clear
php artisan缓存:clear
php artisan视图:clear
php artisan路线:clear
composer dump-autoload


0

您可以通过以下方式获得env验证:

@if (env('APP_ENV')!='Production')
Enviroment Test
@endif

参考链接


0

Laravel 7.11开始,您可以在刀片模板中使用@env('')@production()指令:

@env('staging')
    // The application is running in "staging"...
@endenv

@env(['staging', 'production'])
    // The application is running in "staging" or "production"...
@endenv

要么

@production
    // Production specific content...
@endproduction

另请参见Laravel刀片文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.