最适合入门的Laravel初级教程(六)配置项Config

路由和控制器我们都轻轻撩了下了;
没有数据库怎么行;
讲数据库前我们还得讲下配置项;

laravel 的配置项是在根目录下的 /config 目录中;
还有一个是根目录下的 .env 文件;
为啥要有2个地方用于写配置项呢?
我们打开看下很快就能明白了;
打开 .env 我们就随便看两眼;

第一行就是一个 APP_NAME ;
我们再打开 config/app.php ;

我们也找到了这个 APP_NAME ;
不过是作为一个参数传给了 env() 函数;
那我们就需要先简单讲下 env 函数了;
它是用来获取 .env 文件中的配置的;
它有2个参数;
第一个参数就是配置项名;
第二个参数就是默认值;

'name' => env('APP_NAME', 'Laravel')

那这句代码的意思就是;
从 .env 获取 APP_NAME 的值;
如果 .env 中不存在 APP_NAME 那就默认为 Laravel ;
在 config/database.php 文件中我们可看到数据库的配置;

依然是一片熟悉的 env 函数;
比如说数据库的 host 、port 、database 、username、password;
但是还有一些并没有用 env 函数;
比如说 charset 、 prefix;
那我们不禁迷惑了;
到底什么时候用 env 函数;
什么时候不用 env 函数呢?
在理解这个问题前;
咱还需再穿插一点 git 的小知识;
在项目根目录下我们可以看到有个 .gitignore 文件;

其中有一行写了 .env ;
它的作用就是告诉 git 忽略 .env 文件;
所以如果你去 github 上看别的 laravel 项目的时候;
比如说我的 https://github.com/baijunyao/laravel-bjyblog
你会发现并没有 .env 文件;
很显然那些需要保密的;
或者每个项目特有的;
或者每个环境不同的东西;
我们可以把它写到 .env 文件中;
然后在 /config 目录下的配置文件中用 env() 函数获取;
数据库的配置就很明显属于这类;
团队开发的时候;
每个人都有自己的本地开发环境;
还有测试服务器和生产服务器环境;
如果直接把数据库的账号密码写死在 config/database.php 中;
那就需要把每个团队成员的本地环境以及测试生产环境的数据库账号密码都统一成一个;
一个是不安全;
再个是会比较麻烦;
而那些并不需要保密的;
且需要有一定统一性的就可以直接写在 /config 目录下的配置项中了;
比如说字符集和表前缀这些;
怎么样?有木有开始感受到 laravel 的体贴周到;
她不但是一个 php 框架;
她还在服务器部署以及团队协作方面都为我等开发者考虑了;

那我们学习的时候都需要配置什么呢?
我们挨着从 .env 文件中看;
首先 APP_NAME 需要改的;
这个是我们的项目名;
我这里就改成了 bjyblog ;
APP_URL 是需要改的;
它就是项目的域名;
我是在本地开发的 http://bjyblog.test
DB_ 开头的这些也都要改成自己本地数据库;

改完了 .env 文件;
还有配置项中的一些东西需要改;
咱还是先从数据库说起;
laravel 5.4 以后默认使用 utf8mb4 字符集;
utf8mb4 主要是用来支持 emoji 表情的;
如果你的本地环境中的 mysql 低于5.7.7;
为了防止在以后使用的过程中报如下错误;

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

需要找到 config/database.php 文件中的 mysql ;
修改 charset、collation为utf8;

 'charset' => 'utf8',
 'collation' => 'utf8_unicode_ci',


这样做的后果就是不能在数据库直接存 emoji 表情了;
如果说你就是想在数据库中存 emoji 表情;
那还有一种方案;
找到 appProvidersAppServiceProvider.php 文件;
先 use Schema;

use Illuminate\Support\Facades\Schema;

在 boot 中添加如下代码;

public function boot()
{
    Schema::defaultStringLength(191);
}

如果使用 5.7 以上的 mysql 数据库;
还可以把 strict 改为 false 关闭严格模式;
以防止报类似如下 only_full_group_by 的错误;

 Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
'strict' => false,

除了数据库;
还有两个需要改的;
打开 config/app.php 文件;
把 timezone 改为 PRC;
laravel 默认的时区是 UTC ;
中国的时区是 PRC ;
如果没有改的话;
那数据库存自动生成的时间会和我们的实际相差8个小时;
然后把 locale 改为 zh-CN;
这个就好理解了;
把语言改为中文;
后面讲多语言和验证的时候需要显示中文的时候会用到;

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共10条评论
白俊遥博客

kinder :白哥,威武

2019-11-18 11:46:23 回复

白俊遥博客

ljheisenberg :windows10的使用phpstudy集成环境升级mysql的注意,别用管理员powershell窗口,用管理员cmd窗口来mysqld --initialize-insecure --user-mysql 生成data目录,用powershell窗口生成的data目录文件有问题,提个醒,郁闷了半天。。。

2018-11-26 20:16:02 回复

白俊遥博客

verylary15 :非常感谢,学到很多东西!!!!

2018-11-23 17:36:17 回复

白俊遥博客

大海 :谢谢大佬,在你这学了很多东西

2018-05-28 17:52:22 回复

白俊遥博客

munu 白俊遥博客11111

2018-04-06 11:36:01 回复

白俊遥博客

cantinzing :嘿嘿 很多官方文档没有细节

2018-03-02 08:47:50 回复

白俊遥博客

方不方 :阿斯顿阿斯顿撒旦撒啊

2018-02-04 11:32:16 回复

白俊遥博客

天之皓月 :非常不错,白哥,一直在关注

2018-01-29 17:12:38 回复

白俊遥博客

␆␡␂␇␆␡ :希望赶紧更新到 门面 契约 服务提供者 依赖注入 数据迁移 这些难理解的

2018-01-03 15:23:08 回复

白俊遥博客

Qeyser-Mutellip :非常不错,一晚上看到第六,期待下一集

2018-01-03 03:07:39 回复