laravel 学习之路 配置config

2019-12-18 17:42:17 浏览数 (1)

前面文章路由与控制器我们都了解了,现在了解一下laravelconfig配置

配置项

laravel 的配置项是在根目录下的 /config 目录中,还有一个是根目录下的 .env文件

这里就有个疑问了为啥要有2个地方用于写配置项呢?让我们打开 .env 来看看

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

我们也找到了这个 APP_NAME, 不过是作为一个参数传给了 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 项目的时候你会发现并没有 .env 文件.

很显然需要保密的配置或者每个项目特有的或者每个环境不同的东西我们可以把它卸载 .env 文件里然后在 /config 目录下的配置文件中用 env() 函数获取数据库的配置就很明显属于这类。

并且在团队开发的时候每个人都有自己的本地开发环境还有测试环境生产环境,如果直接写死就需要每个团队成员在这些环境中设置成统一的账号密码,这样做很不安全并且非常麻烦,而那些不需要报名却需要一定统一的性的配置可以直接卸载 /config 目录下的配置文件里。

好了哪我们现在来简单改一下配置

配置 .env 文件

  1. 首先 APP_NAME 需要该成我们的项目名称,我就随便起名字叫 study 了。
  2. APP_URL 是需要该的,他就是项目的域名,我是在本地开发的 http://study.laraveltest.com/
  3. DB_开头的这一堆配置也都要改成本地数据库。

/config 目录下的数据库的配置

laravel 5.4 以后默认使用 utf8mb4 字符集,utf8mb4 主要是用来支持 emoji 表情的,如果你的本地环境mysql 低于5.7.7,为了防止在以后使用的过程中报如下错误

代码语言:javascript复制
    [IlluminateDatabaseQueryException]
    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

代码语言:javascript复制
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',

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

代码语言:javascript复制
use IlluminateSupportFacadesSchema;

在 boot 中添加如下代码

代码语言:javascript复制
public function boot()
{
    Schema::defaultStringLength(191);
}

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

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

0 人点赞