codecamp

Laravel 项目开发规范 配置信息与环境变量

.env.example

因 .env 不会被纳入版本控制器中,所以本地 .env 里添加变量时 必须 同步到 .env.example 中,以免影响其他项目参与者的工作。

变量存储位置

假如项目中需要『CDN 域名』的变量,在 Laravel 中有以下几种选项:

  1. 硬代码,直接写死。—— ❌ 可维护性低
  2. 写死在 config/app.php 文件中。 —— ❌ 无法区分环境进行配置
  3. 存储于 .env 文件中,使用 env() 方法直接读取。 -—— ❌ 虽然解决了环境变量问题但是不推荐
  4. 存储在 .envconfig/app.php 文件中,然后使用 config() 函数来读取。—— ✅ 最佳实践
  • 第一个选项是最古老的方法,代码可维护性极低,一旦域名变更就只能全局替换。
  • 第二个选项无法区分环境,例如本地使用开发环境域名测试,线上才是正式的 CDN 域名。
  • 第三个选项虽然解决了环境变量的问题,并且也具备一定的灵活性,但是不够灵活,假如你的网站流量巨大,需要配置几个 CDN 域名,使其在加载静态资源时随机支配域名,这种做法就无法满足需求了。
  • 第四个选项既支持环境变量,又具备极高的灵活性,假如遇到同样的 CDN 多域名随机问题,你只需要写一个辅助方法,然后在 config/app.php 中调用即可,不需要动到任何一行业务逻辑代码。

另外,有一种必须使用第四种方案的场景。Laravel 带了一个 config:cache 的命令,可以用来提高配置的加载速度。这种场景,是绝对不能在业务代码中使用 env() 方法,会获取不到内容。

✅ 正确的加载方式

.env 文件中设置:

CDN_DOMAIN=cdn.domain.com

config/app.php 文件中设置:

'cdn_domain' => env('CDN_DOMAIN', null),

程序中两种获取 相同配置 的方法:

  1. env('CDN_DOMAIN')
  2. config('app.cdn_domain')

在此统一规定:所有程序配置信息 必须 通过 config() 来读取,所有的 .env 配置信息 必须 通过 env() 来读取,绝不 在配置文件以外的范围使用 env()

有何优势

这样做主要有以下几个优势:

  1. 定义分明,config() 是配置信息,env() 只是用来区分不同环境;
  2. 统一放置于 config 中还可以利用框架的 配置信息缓存功能 来提高运行效率;
  3. 代码健壮性, config()env() 之上多出来一个抽象层,会使代码更加健壮,更加灵活。


Laravel 项目开发规范 代码风格
Laravel 项目开发规范 路由器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }