【问题标题】:Evaluation of env variable in Laravel在 Laravel 中评估环境变量
【发布时间】:2021-08-28 13:09:24
【问题描述】:

抱歉,很简单的问题:
我找不到任何资源来解释 Laravel 中 ENV 变量的评估顺序...通常在 Spring Boot 中,如果我在 docker-compose 中定义一个变量,我知道它会覆盖 application.properties 值。 . 在 Laravel 中也一样吗?

例如:
.env

DB_HOST = A

docker-compose.yml

environment:
    - DB_HOST = B

在应用程序中,是否保证DB_HOST是B?

【问题讨论】:

  • 是的,你是对的,为了确定这一点,创建一个像this 这样的简单路由并返回return env('DB_HOST'); 这样你就可以看到实际值将是environment,尽管它是在.env 中定义了其他值。
  • @matiaslauriti 是的,我已经做到了,但我只是想“确定”它,就像文档中某处写的或类似的东西
  • 我不记得在文档中看到过这个,所以 no 将是我的答案。
  • This 是文档中唯一关于它的内容。

标签: laravel docker environment-variables


【解决方案1】:

在撰写本文时,Laravel 使用 this dotenv 环境。其关键行为由以下行决定:

static::$repository = $builder->immutable()->make();

不可变,如the official dotenv repository 中所述,意味着现有的环境变量不会被覆盖。因此 docker-compose 设置的属于容器环境的变量不会被 .env 覆盖。

但是,由于这是通过挖掘代码推断出来的并且没有明确记录(据我所知),我认为您需要将其视为未记录的行为,如果您依赖于此,那么在升级 Laravel 版本之前要保持警惕以确保它没有改变。

【讨论】:

    【解决方案2】:

    通常首先返回 .env 中定义的变量。它们也存储在 config/ 文件中。在您的情况下,它存储在 config/database.php 文件中。 在我的情况下env('DB_HOST', '127.0.0.1') 就是这个代码。 它的基本意思是您从 .env 上的变量 DB_HOST 中获取存储的值,否则返回指定的默认值 127.0.0.1
    编辑:如 cmets 中所述,您始终可以使用 dd() 或 return env(DB_HOST); 进行测试。你就会得到结果。

    【讨论】:

    • 这和我问的有什么关系?
    猜你喜欢
    • 2020-11-17
    • 2020-11-16
    • 2010-10-14
    • 2011-07-04
    • 2018-01-15
    • 2020-07-12
    • 2016-08-27
    • 2010-09-24
    • 2019-01-08
    相关资源
    最近更新 更多