Laravel 5.3 学习笔记之 配置


Posted in PHP onAugust 28, 2016

1、简介

Laravel 的所有配置文件都存放在 config 目录下,每个配置项都有注释,以保证浏览任意配置文件的配置项都能直观了解该配置项的作用及用法。

2、访问配置值

你可以使用全局辅助函数 config 在应用的任意位置访问配置值,该配置值可以文件名+“.”+配置项的方式进行访问,当配置项没有被配置的时候返回默认值:

$value = config('app.timezone');

如果要在运行时设置配置值,传递数组参数到 config 方法即可:

config(['app.timezone' => 'America/Chicago']);

3、环境配置

基于应用运行的环境不同设置不同的配置值能够给我们开发带来极大的方便,比如,我们通常在本地和线上环境配置不同的缓存驱动,这一机制在 Laravel 中很容易实现。

Laravel 使用 Vance Lucas 开发的 PHP 库 DotEnv 来实现这一机制,在新安装的 Laravel 中,根目录下有一个.env.example 文件,如果 Laravel 是通过 Composer 安装的,那么该文件已经被重命名为 .env,否则的话你要自己手动重命名该文件。

获取环境变量配置值

在应用每次接受请求时,.env 中列出的所有配置及其值都会被载入到 PHP 超全局变量 $_ENV 中,然后你就可以在应用中通过辅助函数 env 来获取这些配置值。实际上,如果你去查看 Laravel 的配置文件,就会发现很多地方已经在使用这个辅助函数了:

'debug' => env('APP_DEBUG', false),

传递到 env 函数的第二个参数是默认值,如果环境变量没有被配置将会是个该默认值。

不要把 .env 文件提交到源码控制(svn 或 git 等)中,因为每个使用你的应用的开发者/服务器可能要求不同的环境配置。

如果你是在一个团队中进行开发,你需要将 .env.example 文件随你的应用一起提交到源码控制中:将一些配置值以占位符的方式放置在 .env.example 文件中,这样其他开发者就会很清楚运行你的应用需要配置哪些环境变量。

判断当前应用环境

当前应用环境由 .env 文件中的 APP_ENV 变量决定,你可以通过 App 门面 的 environment 方法来访问其值:

$environment = App::environment();

你也可以向 environment 方法中传递参数来判断当前环境是否匹配给定值,如果需要的话你甚至可以传递多个值。如果当前环境与给定值匹配,该方法返回 true:

if (App::environment('local')) {
  // The environment is local
}

if (App::environment('local', 'staging')) {
  // The environment is either local OR staging...
}

应用实例也可以通过辅助函数 app 来访问:

$environment = app()->environment();

4、配置缓存

为了给应用加速,你可以使用 Artisan 命令 config:cache 将所有配置文件的配置缓存到单个文件里,这将会将所有配置选项合并到单个文件从而可以被框架快速加载。

应用一旦上线,就要运行一次 php artisan config:cache,但是在本地开发时,没必要经常运行该命令,因为配置值经常需要改变。

5、维护模式

当你的应用处于维护模式时,所有对应用的请求都会返回同一个自定义视图。这一机制在对应用进行升级或者维护时,使得“关闭”站点变得轻而易举。对维护模式的判断代码位于应用默认的中间件栈中,如果应用处于维护模式,则状态码为 503 的  MaintenanceModeException 将会被抛出。

要开启维护模式,只需执行 Artisan 命令 down 即可:

php artisan down

要关闭维护模式,对应的 Artisan 命令是 up:

php artisan up

维护模式响应模板

默认的维护模式响应视图模板是 resources/views/errors/503.blade.php

维护模式 & 队列

当你的站点处于维护模式中时,所有的队列任务都不会执行;当应用退出维护模式这些任务才会被继续正常处理。

维护模式的替代方案

由于维护模式命令的执行需要几秒时间,你可以考虑使用 Envoyer 实现 0 秒下线作为替代方案。

PHP 相关文章推荐
那些年一起学习的PHP(一)
Mar 21 PHP
PHP抽象类 介绍
Jun 13 PHP
PHP爆绝对路径方法收集整理
Sep 17 PHP
php去掉文件前几行的方法
Jul 29 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHP使用new StdClass()创建空对象的方法分析
Jun 06 PHP
PHP实现微信图片上传到服务器的方法示例
Jun 29 PHP
详细解读php的命名空间(一)
Feb 21 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 22 PHP
PHP中SESSION过期设置
Mar 09 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 #PHP
PHP实现导出带样式的Excel
Aug 28 #PHP
Linux系统中为php添加pcntl扩展
Aug 28 #PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 #PHP
PHP编写简单的App接口
Aug 28 #PHP
PHP导出带样式的Excel示例代码
Aug 28 #PHP
总结对比php中的多种序列化
Aug 28 #PHP
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
2020/04/15 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python实现简单的计时器功能函数
2015/03/14 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python中import与from方法总结(推荐)
2019/03/21 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
英国电子专家:maplin
2019/09/04 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
会计专业毕业生求职信分享
2014/01/03 职场文书
策划总监岗位职责
2014/02/16 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
教师师德师风整改措施
2014/10/24 职场文书
2019个人工作总结
2019/06/21 职场文书
Nginx tp3.2.3 404问题解决方案
2021/03/31 Servers
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python