最近的所见让我觉得很多人实际上都在乱用 .env 文件,因为他们根本不明白当初从 .php 配置文件改成 .env 文件的原因。
大家都知道,在之前的版本 Laravel 是使用 config 文件夹下的 php 文件来完成项目所需要的配置的,后面从大概从 5 开始就使用了 .env 来放置部分配置。为啥要这样做呢?感觉增加了复杂度啊?
实际上,我们在开之前的版本开发过程中会遇到一些很常见的问题,比如两个人或者更多人在合作开发一个项目,数据库都使用本地的,但是由于数据库配置文件是在版本库中的,也就意味着每次拉代码下来以后都要修改一下配置文件的 host ,甚至账号,这是一个很尴尬的场景。这里出现这个场景的原因就是:应该随环境变化的东西被写死了。
所以出现了使用 .env 配置文件,用以存储一些依赖环境的变量,比如数据库配置,因为它不会被加入到版本库中, 所以还用以配置一些敏感信息:比如正式环境的一些第三方应用账号,token 等。
但是现状却是,很多人在使用中想要把所有的配置(或者自己想要改动的配置)都写到 env 中,比如,数据库字符集、邮件标题。然而这些东西从本质上来讲它就应该是这个应用都统一的就不应该这么玩。
还有一件事顺便提一下,数据表前缀,实际上现在很多人已经不需要用它了,它的存在是很久以前大家多个项目共用一个数据库时才用前缀来区分,现在的应用基本都一个应用一个库,所以它已经是一个非常稀有的需求了,更不用说需要写到 .env 了。参见讨论:laravel/laravel#4042
一个简单的判断技巧:这项配置是不是需要每个环境都不一样?如果是就放到 env, 否则就写到 config 目录下就好了。