Laravel 中的配置文件
前言
最近又在巩固Laravel
进阶课程,平时的工作使用的不是Laravel
框架,很多的知识点和原理都忘记的差不多了,我想我每次学习完一节课程,可不可以记录下自己的学习感受呢,这样下次忘记的时候翻阅文章把忘记的地方拾起来。
以前我的学习都是用思维导图,或者在课程最后写下一些自己的感受,但是写的都太碎片了,有的没的,所以我想把内容丰富一下,结合自己的理解,再加上一些思考,这样文章也比较有内容一下。
Laravel中的配置文件
Laravel
框架的配置文件有很多,除了默认的配置文件外,你安装的扩展也会有配置文件,了解配置文件就很重要。
比如你要修改数据库的密码账户,那必须的修改数据据配置文件database.php
,修改Session
的配置文件session.php
。各式各样的配置文件的功能不一样,不同作用的配置会在不同的文件中,那么到底有那些配置文件,这里简单的列举一下。
- app.php
- auth.php
- cache.php
- database.php
- mail.php
上面我列举了一些配置文件,还有一些配置文件就不贴出来了,可以到项目的根目录中config
目录下查看,这个目录存放的就是框架的配置文件,一些第三方扩展的配置文件也会放在config
目录下。
我的学习方法是对这些配置文件不做了解,只要知道app.php
是应用配置相关的,比如时区、语言、bug模式等的,database.php
是数据库配置相关的,其他的用到了再说,一下子学习太多忘得也是飞快的。
配置文件里面都有什么呢,很简单,就是定义了一个数组,然后返回这个数组即可,以app.php
配置文件为例
return [
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
配置文件中有很多的配置项,这些配置项组成了一个个配置文件,通过这些配置文件完成项目各种服务的配置。
修改配置
配置文件常用的操作就是修改配置了,修改配置用两种方法,第一种配置就是直接修改配置文件,这种方式最简单也是最直接的,不过这种方案在Laravel
中不太建议,这是因为有些配置修改起来还是很频繁的。比如修改debug模式,本地开发需要开启debug模式,生产环境需要关闭它,如果我们直接修改app.php
文件,如果稍加不注意还会导致其他问题。如果我们使用了git
来管理项目,这个app.php
修改就会纳入到版本管理中,需要提交修改,但是这个修改没有意义。
env函数
从上面得知直接修改配置文件不好,优雅的方案是修改.env
文件,我们把常规的配置放在.env
文件中,然后通过env()
函数读取。env
文件中的配置,比如读取.env
文件中数据库用户名的配置可以用env('DB_DATABASE','root')
,这样就可以获取数据库的用户名了,然后在database.php
文件用调用env
函数。
return [
....
'mysql' => [
'database' => env('DB_DATABASE', 'forge'),
]
....
]
这样一来我们就可以不用修改database.php
文件的配置项,通过修改.env
文件对应的配置即可,同时这次修改不会纳入到git
版本库中,这是因为.env
文件被git
设置成忽略状态。
env
函数读取的是.env
文件中的配置,我们看下这个文件中都有些什么。
....
APP_NAME=bbs
APP_ENV=local
APP_KEY=base64:vRlNNAiIyAZOlfQJ5vswjD2M4Rsus17kUWwRgbLodko=
APP_DEBUG=true
...
可以看到这个文件不是一个php
文件,配置项的格式是配置项名称=xxx
,我们也可以添加自己的配置项,比如加一个时间配置TIMEZONE=Asia/Shangehai
,通过env('TIMEZONE')
进行读取。env
函数的第二个参数是设置默认值,意思就是说如果.env
文件没有这个配置项那么它的返回值是第二个参数。
如果我们给.env
文件添加了配置项,记得把添加的配置添加到.env.example
文件中,这个文件会纳入到版本库中,方便我们上线进行使用这些添加的配置。
config函数
如果我要的配置不在.env
文件中而在mail.php
文件中,我要临时设置和读取该怎么办,这个时候我们就要使用config
函数了,这个函数在使用上有些特色,我们一一说。
比如我现在要读取mail.php
文件中的driver
配置项,可以使用config('mail.driver')
, 如果要获取mail.php
文件中所有的配置项可以使用config('mail')
,注意两种方式的区别。
如果我们想临时的修改配置,但是又不像让它生效,可以使用config(['mail.driver'=>'sendmail'])
,这样邮箱配置中的驱动配置就改为了sendmail
,不过这种方式是临时的,并不会写入到配置文件中。
探索
在课程中我们知道要修改语言和时区,课程中采用的是修改config.php
文件,其实也可以在.env
文件中设置时区和语言的配置项,然后在app.php
文件中使用env
函数读取即可。
下面演示一下这种做法。
#.env文件新增如下内容
APP_TIMEZONE=Shanghai
APP_LOCALE=zh-CN
# app.php文件修改如下内容
'timezone' => env('APP_TIMEZONE','PRC'),
'locale' => env('APP_LOCALE','en'),
记得上面在.env
文件中添加的内容,同时也添加到.env.example
文件中。
不过这么做也有不好的地方,首先时区和语言一般都不会修改,把这种不太容易修改的配置放在.env
文件种,会导致.env
文件越来越臃肿,所以不常用的配置我们还是建议放在对应的配置文件种进行配置,不要添加到.env
文件。
这种只是列出另外一种设置配置的方式,你也可以根据你的项目需求采用合理的方案,合适自己的才是最好的。
总结
以上就是关于配置文件相关的内容,不过文章关于配置文件的内容停留在使用层面,Laravel
中源码是什么样子的,这里就没有列举了,以及env
如何工作这里都没有讨论,以后有机会再说吧。
本作品采用《CC 协议》,转载必须注明作者和本文链接