要明白的知识点

  1. 在哪里定义APP_ENV这个环境变量,它有什么作用,它与环境文件什么关系
  2. 在哪里定义应用的环境
  3. 了解环境文件路径,环境文件,应用环境这几个概念

预备知识

在application中与环境相关的属性有两个

  • $environmentPath 环境路径,默认为basePathuseEnvironmentPath($path)设置,environmentPath()获取
  • $environmentFile,环境文件名,默认是.env, loadEnvironmentFrom($file)设置,environmentFile()获取
  • 获取完整的环境文件的方法是environmentFilePath(),默认返回项目根目录/.env这个文件

与环境相关的两个bootstrapper

LoadEnvironmentVariables 加载环境变量,将环境文件中的配置写到全局变量$_ENV和$_SERVER中,其实这个配置是为下面的加载配置服务的,可以在配置文件中使用env来读取环境文件中定义的值
LoadConfiguration 加载配置,读取/config下面所有的配置文件,放到$Aapp['config']中,以便在任何地方可以读取相关配置,其中config/app.php这个文件是必须要定义的

加载环境变量LoadEnvironmentVariables

  1. 当配置文件缓存了就不用执行,会跳过这一步,也就是说LoadEnvironmentVariables是为配置文件服务的
  2. 第一个特殊的环境变量APP_ENV, 它决定着应用环境和将哪个环境文件中的值放到全局常量$_ENV和$_SERVER中,环境文件中的配置可以在配置文件中使用env()的方式获取
  3. 根据env('APP_ENV')找到相应用环境文件,使用第三方库Dotenv将该环境文件中的配置保存到$_ENV和$_SERVER中,查看源代码,实际上使用apache中的apache_setenv函数或php的putenv函数,另外存在$_ENV和$_SERVER这两个全局常量中

如何设置环境变量APP_ENV?

应用有console和web两种运行方式,在console命令行工作方式使用 --env来指定当前应用环境,在web运行方式时,一般在web服务器中指定,如apache中 使用SetEnv APP_ENV xxxx 如果使用homestead环境,可以

    variables:- key: 'APP_ENV'value: 'home'

如果指定了APP_ENV这个环境变量,如env('APP_ENV')的值为home,那么环境文件就是 项目根目录/.env.home
也就是说不同的环境APP_ENV对应不同的环境文件

总结

总结1:如果定义APP_ENV这个环境变量,如env('APP_ENV')的值为wang, 就将么环境文件为 .env.wang里的配置转为全局常量$_ENV和$_SERVER中
总结2:如果没用定义APP_ENV这个环境变量,那么就将.env这个文件中的配置保存全局常量$_ENV和$_SERVER中
总结3:如果上面两种都没有,一般会报错,laravel默认也可以执行,不捕获这个错误

应用环境

设置应用环境: detectEnvironment(Closure $callback),最终保存在$app['env']中
获取应用环境: environment()
判断是否是local环境: isLocal()
判断是否是test环境:runningUnitTests()

在哪里设置应用环境呢,laravel在LoadConfiguration这个bootstrapper的bootstrap()中定义的,事实上它是读取配置文件config/app下面env的值,如果没设就返回production

在配置文件app.env中指定,'env' => env('APP_ENV', 'production'), 它的意思是,如果指定了APP_ENV,那么应用环境就是APP_ENV的值,没有指定,就是production。如果在app.env中也没有指定,那么laravel在LoadConfiguration时中会将其指定为production,也就是$app['env']有三个地方可以指定

课后思考

  1. 应用环境是不是必须要指定?
  2. 指定应用环境的几个步骤

laravel知识点: 了解应用环境相关推荐

  1. laravel 知识点总结

    1.eloquent 关系理解: https://lvwenhan.com/laravel/423.html 转载于:https://www.cnblogs.com/chaoyong/p/874337 ...

  2. Python技能树及 CSDN MarkDown编辑器测评

    Python技能树及 CSDN MarkDown编辑器测评 文章目录 前言 一.对Python技能数的测评 (一). Python技能树的介绍及其优点 1. Python技能树的介绍及其优点 (1)首 ...

  3. Python学习宝典官方推荐 |Python技能树测评

    Python技能树测评 背景 详细介绍 结语 背景 对于一个Python小白来说,能有一个板块分类,覆盖知识面广且讲解清晰的学习网站是一件极其幸运的事情.如今,只要你想到的东西,就会有人做出来,比如P ...

  4. 如何学习Python,CSDN帮你规划路线|Python技能树测评

    相信很多刚接触到python的朋友肯定是一头雾水,觉得python的知识点怎么那么多,自己到底该怎么学?即使有了思维导图,也只是把知识点串联起来,但是还是没有具体的学习路线以及学习材料! 但是,CSD ...

  5. laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型

    无论是基础查询还是高级查询,实际都会依赖表实体,一个表字段和一个类属性的关系通过映射实现,而对类的操作也就相当于在对数据表操作.Swoft 2.x 中实体类对比 1.x 使用起来更简单,它兼容 Bui ...

  6. 30个学习大数据挖掘的重要知识点!

    https://www.jianshu.com/p/2441b69794b0 下面是一些关于大数据挖掘的知识点,今天和大家一起来学习一下. 1. 数据.信息和知识是广义数据表现的不同形式. 2. 主要 ...

  7. laravel mysql注入_laravel中如何利用反射实现依赖注入

    依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...

  8. 2020年PHP中级面试知识点及答案

    一.前言 最近博主也是历尽千辛万苦换了份工作,每次换之前不找点面试题看似乎就没自信一样..奈何网上有些面试题是比较老套的,所以这里重新总结一份2020年的,题目是有些是博主自己不熟悉的点,有些是bos ...

  9. laravel conf/app.php

    <?php return [ /* |-------------------------------------------------------------------------- |应用 ...

最新文章

  1. Spark的基础应用
  2. 2020年服务器操作系统占有率,服务器操作系统占有率
  3. 微软Windows 7实现10秒启动的背后
  4. 通过console口连接交换机
  5. MySQL主从复制的原理:IO用于交互 SQL用于解析执行;主bin-log 从relay-log;
  6. 手机端适应_手机网站开发制作和电脑pc端有哪些区别
  7. HDU - 1525
  8. bzoj4503: 两个串
  9. JAVA中DecimalFormat如何进行四舍五入?
  10. CentOS8安装jdk1.8
  11. ExtJs 4.x MVC 架构
  12. 使用原生XMLHttpRequest对象演示ajax(Ajax)功能
  13. D3实现的ChinaMap
  14. MIDI文件格式(一)
  15. 射频功率dbm-w换算表
  16. 怎么使用计算机英语段落,怎么在电脑word文档中添加英文朗读功能
  17. 登录harbor时的SSL异常: x509: certificate is valid for ingress.local
  18. 【树莓派】使用VNC远程桌面
  19. python 绘制qq图
  20. Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?

热门文章

  1. Windows 10中安装.net framework提示已经安装
  2. 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
  3. SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践)
  4. (JSP)关于手机端(尤其是苹果手机)pdf文件无法打开的解决方案
  5. IDEA中项目引入独立包打包失败问题解决(找不到包)
  6. 安装DotNetCore.1.0.0-VS2015Tools.Preview2.exe 错误Error 0x81f40001 解决方法
  7. Proxmox VE中出现TASK ERROR: command ‘apt-get update‘ failed: exit code 100的解决方法
  8. 记一次升级node版本后,运行原vue项目报错问题解决方法
  9. 如何创建一个<style> tag with Javascript?
  10. Android Fragment手柄后退按钮按下[重复]