# 基础配置

初次接触一个新项目时,会给人一种一筹莫展的感觉,尤其是一个全新的未知的项目,首页我们拿到一个新项目(或新框架),首页我们先看下项目框架的具体架构和设计思路,在上一章节《目录结构》中我们做了详细的介绍,这里我们不做扩展,本章节我们重点介绍下框架的基础配置;

# 项目依赖

框架使用Composer作为依赖包管理工具,在开始使用项目前请务必安装好第三方依赖库,以便项目在实际运行过程中出现缺少依赖或者莫名的报错问题(切记),框架默认集成的依赖如下:

"php": "^7.3|^8.0",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"gregwar/captcha": "^1.1",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.12",
"laravel/tinker": "^2.5"
1
2
3
4
5
6
7

由于ThinkPHP6框架本身将以前的版本(如5.15.0)中集成的部分第三方依赖进行了剔除,所以我们在使用ThinkPHP6进行项目开发时需要手动将一些必备的依赖包进行自行加入,如验证码依赖think-captcha,在项目开发过程中可以根据自己的实际需求自行引入其他依赖,然后通过 Composer 安装即可;

# 环境变量

系统环境变量配置文件.env,系统运行所需的参数如有需要都可以作为环境变量参数存在,内容如下:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:A4FYcFqc80OFOYTeXE6CnYW+jXJl1lJD0wD5ix2OE+A=
APP_DEBUG=true
APP_URL=http://blog.test

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-vue-pro
DB_USERNAME=root
DB_PASSWORD=
DB_PREFIX=lev_

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"


SITE_NAME = Laravel+Vue旗舰版
NICK_NAME = Laravel+Vue旗舰版
VERSION = v1.2.0

IMG_URL = http://images.evl8.pro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

参数说明:

  • APP_DEBUG 表示是否开启调试模式,true是、false否;
  • SITE_NAME 系统全称;
  • NICK_NAME 系统昵称;
  • VERSION 系统版本;
  • IMG_URL 参数为图片域名,需要给当前图片域名配置虚拟主机,Apache和Nginx都可以,根据实际情况自行配置;

# 常量配置

同时在模块内部我们需要对一些常规的常量进行配置,ThinkPHP6已经为我们做了架构层面的解析,我们只需要在模块内建立config文件夹,以admin模块为例,我们在config局部配置目录里面新建文件admin.php,在此文件中我们写入常规的配置参数,使用系统本身的获取配置的方式即可获取,如config('admin.gender_list'),系统admin.php详细内容如下:

<?php
// +----------------------------------------------------------------------
// | RXThinkCMF框架 [ RXThinkCMF ]
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 南京RXThinkCMF研发中心
// +----------------------------------------------------------------------
// | 官方网站: http://www.rxthink.cn
// +----------------------------------------------------------------------
// | Author: 牧羊人 <1175401194@qq.com>
// +----------------------------------------------------------------------

<?php

/**
 * 后台配置文件
 */
return [

    /**
     * 性别
     */
    'gender_list' => [
        1 => '男',
        2 => '女',
        3 => '未知',
    ],

    /**
     * 菜单类型
     */
    'menu_type' => [
        1 => '模块',
        2 => '导航',
        3 => '菜单',
        4 => '节点',
    ],

    /**
     * 菜单节点
     */
    'menu_func' => [
        1 => '列表',
        5 => '添加',
        10 => '修改',
        15 => '删除',
        20 => '详情',
        25 => '状态',
        30 => '批量删除',
        35 => '添加子级',
        40 => '全部展开',
        45 => '全部折叠',
    ],

    /**
     * 配置类型
     */
    'config_type' => [
        'hidden' => '隐藏',
        'readonly' => '只读文本',
        'number' => '数字',
        'text' => '单行文本',
        'textarea' => '多行文本',
        'array' => '数组',
        'password' => '密码',
        'radio' => '单选框',
        'checkbox' => '复选框',
        'select' => '下拉框',
        'icon' => '字体图标',
        'date' => '日期',
        'datetime' => '时间',
        'image' => '单张图片',
        'images' => '多张图片',
        'file' => '单个文件',
        'files' => '多个文件',
        'ueditor' => '富文本编辑器',
        'json' => 'JSON',
    ],

    /**
     * 友链类型
     */
    'link_type' => [
        1 => '友情链接',
        2 => '合作伙伴',
    ],

    /**
     * 友链形式
     */
    'link_form' => [
        1 => '文字链接',
        2 => '图片链接',
    ],

    /**
     * 友链平台
     */
    'link_platform' => [
        1 => 'PC站',
        2 => 'WAP站',
        3 => '小程序',
        4 => 'APP应用',
    ],

    /**
     * 站点类型
     */
    'item_type' => [
        1 => '普通站点',
        2 => '其他',
    ],

    /**
     * 广告平台
     */
    'ad_platform' => [
        1 => 'PC站',
        2 => 'WAP站',
        3 => '小程序',
        4 => 'APP应用',
    ],

    /**
     * 广告类型
     */
    'ad_type' => [
        1 => '图片',
        2 => '文字',
        3 => '视频',
        4 => '其他',
    ],

    /**
     * 布局推荐类型
     */
    'layout_type' => [
        1 => 'CMS文章',
        2 => '其他',
    ],

    /**
     * 城市级别
     */
    'city_level' => [
        1 => "省份",
        2 => "城市",
        3 => "区县",
    ],

    /**
     * 行为类型
     */
    'action_type' => [
        1 => '模块',
        2 => '插件',
        3 => '主题',
    ],

    /**
     * 执行操作
     */
    'action_execution' => [
        1 => '自定义操作',
        2 => '记录操作',
    ],

    /**
     * 设备类型
     */
    'user_device' => [
        0 => '未知',
        1 => '苹果',
        2 => '安卓',
        3 => 'WAP站',
        4 => 'PC站',
        5 => '微信小程序',
        6 => '后台添加',
    ],

    /**
     * 用户来源
     */
    'user_source' => [
        1 => '注册会员',
        2 => '马甲会员',
    ],

    /**
     * 定时任务类型
     */
    'crontab_type' => [
        1 => '请求URL',
        2 => '执行SQL',
        3 => '执行Shell',
    ],

    /**
     * 通知来源
     */
    'notice_source' => [
        1 => '云平台',
    ],

    /**
     * 通知状态
     */
    'notice_status' => [
        1 => '草稿箱',
        2 => '立即发布',
        3 => '定时发布',
    ],
];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213

系统加载完成后,当前配置文件会默认加载到系统中,此时我们可以使用框架自带的获取配置参数的方式获取参数值,如:config('admin.gender_list')等等,以此类推,需要定义常量的参数都可以在此文件中进行配置;

# 中间件配置

在项目开发中经常会使用到中间件,我们可以自定义中间件并在配置文件 App\Http\Middleware\UserLogin.php 中进行配置,如下所示:

<?php
<?php


namespace App\Http\Middleware;

use App\Helpers\Jwt;
use Closure;
use Illuminate\Auth\Middleware\Authenticate as Middleware;

class UserLogin extends Middleware
{
    /**
     * 执行句柄
     * @param \Illuminate\Http\Request $request
     * @param Closure $next
     * @param mixed ...$guards
     * @return mixed
     * @throws \Illuminate\Auth\AuthenticationException
     * @since 2020/8/31
     * @author 牧羊人
     */
    public function handle($request, Closure $next, ...$guards)
    {
        $response = $next($request);

        $action = app('request')->route()->getAction();
        $controller = class_basename($action['controller']);
        list($controller, $action) = explode('@', $controller);
        $noLoginActs = ['LoginController'];
        $token = $request->headers->get('Authorization');
        if (strpos($token, 'Bearer ') !== false) {
            $token = str_replace("Bearer ", null, $token);
            // JWT解密token
            $jwt = new Jwt();
            $userId = $jwt->verifyToken($token);
        } else {
            $userId = 0;
        }
        if (!$userId && !in_array($controller, $noLoginActs)) {
            // 判断用户未登录就跳转至登录页面
            return message("请登录", false, null, 401);
        }
        //如果已登录则执行正常的请求
        return $response;
    }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

系统中我们自定义了登录验证中间件并在此做了注册配置,可以借助命令 php think make:middleware 中间件名 自定生成文件并到指定目录 app\middleware\ 下,使用也非常简单,有两种使用方式如下所示:

// 登录检测中间件
$this->middleware('user.login');
1
2