laravel知识点: 了解应用环境
要明白的知识点
- 在哪里定义APP_ENV这个环境变量,它有什么作用,它与环境文件什么关系
- 在哪里定义应用的环境
- 了解环境文件路径,环境文件,应用环境这几个概念
预备知识
在application中与环境相关的属性有两个
$environmentPath
环境路径,默认为basePath
,useEnvironmentPath($path)
设置,environmentPath()
获取$environmentFile
,环境文件名,默认是.env
,loadEnvironmentFrom($file)
设置,environmentFile()获取- 获取完整的环境文件的方法是
environmentFilePath()
,默认返回项目根目录/.env
这个文件
与环境相关的两个bootstrapper
LoadEnvironmentVariables
加载环境变量,将环境文件中的配置写到全局变量$_ENV和$_SERVER中,其实这个配置是为下面的加载配置服务的,可以在配置文件中使用env来读取环境文件中定义的值
LoadConfiguration
加载配置,读取/config下面所有的配置文件,放到$Aapp['config']中,以便在任何地方可以读取相关配置,其中config/app.php这个文件是必须要定义的
加载环境变量LoadEnvironmentVariables
- 当配置文件缓存了就不用执行,会跳过这一步,也就是说LoadEnvironmentVariables是为配置文件服务的
- 第一个特殊的环境变量
APP_ENV
, 它决定着应用环境和将哪个环境文件中的值放到全局常量$_ENV和$_SERVER中,环境文件中的配置可以在配置文件中使用env()的方式获取- 根据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']有三个地方可以指定
课后思考
- 应用环境是不是必须要指定?
- 指定应用环境的几个步骤
laravel知识点: 了解应用环境相关推荐
- laravel 知识点总结
1.eloquent 关系理解: https://lvwenhan.com/laravel/423.html 转载于:https://www.cnblogs.com/chaoyong/p/874337 ...
- Python技能树及 CSDN MarkDown编辑器测评
Python技能树及 CSDN MarkDown编辑器测评 文章目录 前言 一.对Python技能数的测评 (一). Python技能树的介绍及其优点 1. Python技能树的介绍及其优点 (1)首 ...
- Python学习宝典官方推荐 |Python技能树测评
Python技能树测评 背景 详细介绍 结语 背景 对于一个Python小白来说,能有一个板块分类,覆盖知识面广且讲解清晰的学习网站是一件极其幸运的事情.如今,只要你想到的东西,就会有人做出来,比如P ...
- 如何学习Python,CSDN帮你规划路线|Python技能树测评
相信很多刚接触到python的朋友肯定是一头雾水,觉得python的知识点怎么那么多,自己到底该怎么学?即使有了思维导图,也只是把知识点串联起来,但是还是没有具体的学习路线以及学习材料! 但是,CSD ...
- laravel mysql save 后 查看 受影响行数_swoft2教程系列-mysql模型
无论是基础查询还是高级查询,实际都会依赖表实体,一个表字段和一个类属性的关系通过映射实现,而对类的操作也就相当于在对数据表操作.Swoft 2.x 中实体类对比 1.x 使用起来更简单,它兼容 Bui ...
- 30个学习大数据挖掘的重要知识点!
https://www.jianshu.com/p/2441b69794b0 下面是一些关于大数据挖掘的知识点,今天和大家一起来学习一下. 1. 数据.信息和知识是广义数据表现的不同形式. 2. 主要 ...
- laravel mysql注入_laravel中如何利用反射实现依赖注入
依赖注入 在一个类中经常会依赖于其他的对象,先看一下经典的写法 class Foo { public $bar; public function __construct() { $this->b ...
- 2020年PHP中级面试知识点及答案
一.前言 最近博主也是历尽千辛万苦换了份工作,每次换之前不找点面试题看似乎就没自信一样..奈何网上有些面试题是比较老套的,所以这里重新总结一份2020年的,题目是有些是博主自己不熟悉的点,有些是bos ...
- laravel conf/app.php
<?php return [ /* |-------------------------------------------------------------------------- |应用 ...
最新文章
- Spark的基础应用
- 2020年服务器操作系统占有率,服务器操作系统占有率
- 微软Windows 7实现10秒启动的背后
- 通过console口连接交换机
- MySQL主从复制的原理:IO用于交互 SQL用于解析执行;主bin-log 从relay-log;
- 手机端适应_手机网站开发制作和电脑pc端有哪些区别
- HDU - 1525
- bzoj4503: 两个串
- JAVA中DecimalFormat如何进行四舍五入?
- CentOS8安装jdk1.8
- ExtJs 4.x MVC 架构
- 使用原生XMLHttpRequest对象演示ajax(Ajax)功能
- D3实现的ChinaMap
- MIDI文件格式(一)
- 射频功率dbm-w换算表
- 怎么使用计算机英语段落,怎么在电脑word文档中添加英文朗读功能
- 登录harbor时的SSL异常: x509: certificate is valid for ingress.local
- 【树莓派】使用VNC远程桌面
- python 绘制qq图
- Thanos 与 VictoriaMetrics,谁才是打造大型 Prometheus 监控系统的王者?
热门文章
- Windows 10中安装.net framework提示已经安装
- 关于Windows 1803版本内核隔离打开后无法关闭的解决方案
- SQL SERVER 2014无法启动T-SQL调试的解决方法(亲自实践)
- (JSP)关于手机端(尤其是苹果手机)pdf文件无法打开的解决方案
- IDEA中项目引入独立包打包失败问题解决(找不到包)
- 安装DotNetCore.1.0.0-VS2015Tools.Preview2.exe 错误Error 0x81f40001 解决方法
- Proxmox VE中出现TASK ERROR: command ‘apt-get update‘ failed: exit code 100的解决方法
- 记一次升级node版本后,运行原vue项目报错问题解决方法
- 如何创建一个<style> tag with Javascript?
- Android Fragment手柄后退按钮按下[重复]