# 基础配置

# 概述

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

# 项目依赖

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

"php": ">=5.6.0",
"topthink/framework": "5.1.*",
"topthink/think-image": "^1.0",
"topthink/think-captcha": "^2.0",
"topthink/think-worker": "^2.0",
"topthink/think-queue": "1.*",
"topthink/think-mongo": "1.*",
"topthink/think-oracle": "2.*",
"topthink/think-migration": "1.*",
"overtrue/pinyin": "~4.0",
"phpmailer/phpmailer": "^6.0",
"phpoffice/phpexcel": "^1.8",
"phpoffice/phpword": "^0.14.0",
"mtdowling/cron-expression": "^1.2",
"workerman/workerman-for-win": "^3.5",
"aliyuncs/oss-sdk-php": "^2.3",
"qiniu/php-sdk": "^7.2",
"endroid/qrcode": "^3.5",
"jpush/jpush": "*",
"php-amqplib/php-amqplib": "2.7.*",
"alibabacloud/sdk": "^1.7",
"php-ffmpeg/php-ffmpeg": "^0.14.0"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

ThinkPHP5.1在5.0的基础上对底层架构做了进一步的改进,引入新特性,并提升版本要求。另外一个事实是,5.1版本看起来对开发者更加友好,表现在目录结构更直观、调试输出更直观和代码提示更直观,框架中我们已经集成了常用的第三方依赖包,如topthink/think-captchaphpmailer/phpmailerphpoffice/phpexcelphpoffice/phpwordaliyuncs/oss-sdk-php等等基础依赖,同时根据现实需求,我们还引入了阿里短信依赖alibabacloud/sdk、多媒体文件处理依赖php-ffmpeg/php-ffmpeg、消息中间件依赖php-amqplib/php-amqplib以及消息推送依赖jpush/jpush等等;如需其他依赖,请根据现实的业务做相应的依赖引入,然后安装即可;

# 环境变量

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

//调试模式
app_debug = true
//应用Trace
app_trace = false

// 数据库配置
[database]
type = mysql
hostname = 127.0.0.1
database = rxthink.pro
username = root
password =
hostport = 3306
charset = utf8mb4
prefix = think_
debug = true

// 缓存配置
[cache]
type = redis
host = 127.0.0.1
port = 6379
password =
prefix = RX_

// 消息队列
[rabbitmq]
host = /
ip = 127.0.0.1
port = 5672
user = guest
password = guest

// 全局配置
[system]
site_name = RXThinkCMF_TP5.1旗舰版
nick_name = 旗舰版v4.0.4
version = v4.0.4
attach_path = D:\sites\RXThinkCMF\RXThinkCMF_TP5.1_PRO\public\uploads

// 网址配置
[domain]
site_url = http://www.demo.com
main_url = http://admin.demo.com
wap_url = http://m.demo.com
api_url = http://api.demo.com
script_url = http://script.demo.com
image_url = http://img.demo.com
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

备注:app_debug参数表示是否开启调试模式,database为数据库连接相关配置,cache系统缓存配置,对应的配置文件是cache.php,rabbitmq是消息队列配置(用不到可以不用管它),system是系统常规参数配置,定义了系统的名称及版本号等信息,domain主要设定系统访问需要的域名,如图片域名(需单独配置);

IMG_URL这里声明的是系统的图片域名,系统会读取当前参数做图片访问域名解析使用,在下文(《虚拟主机配置》)[]中会做详细说明;

# 应用配置

系统公共应用配置文件app.php,应用配置文件中提供了基础全部参数的配置,系统架构采用的是多引用模式,域名和多应用模块目录的绑定也在此文件中配置,域名绑定参数为:domain_bind,域名及相关目录的绑定下面有更详细的说明,配置文件内容如下:

<?php

// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------

use \think\facade\Env;

return [
    // 应用名称
    'app_name' => '',
    // 应用地址
    'app_host' => '',
    // 应用调试模式
    'app_debug' => Env::get('app.debug', false),
    // 应用Trace
    'app_trace' => Env::get('app.trace', false),
    // 是否支持多模块
    'app_multi_module' => true,
    // 入口自动绑定模块
    'auto_bind_module' => true,
    // 注册的根命名空间
    'root_namespace' => [
        'addons' => Env::get('root_path') . 'addons/',
        'plugins' => Env::get('root_path') . 'plugins/'
    ],
    // 默认输出类型
    'default_return_type' => 'html',
    // 默认AJAX 数据返回格式,可选json xml ...
    'default_ajax_return' => 'json',
    // 默认JSONP格式返回的处理方法
    'default_jsonp_handler' => 'jsonpReturn',
    // 默认JSONP处理方法
    'var_jsonp_handler' => 'callback',
    // 默认时区
    'default_timezone' => 'Asia/Shanghai',
    // 是否开启多语言
    'lang_switch_on' => false,
    // 默认全局过滤方法 用逗号分隔多个
    'default_filter' => '',
    // 默认语言
    'default_lang' => 'zh-cn',
    // 应用类库后缀
    'class_suffix' => false,
    // 控制器类后缀
    'controller_suffix' => false,

    // +----------------------------------------------------------------------
    // | 模块设置
    // +----------------------------------------------------------------------

    // 默认模块名
    'default_module' => 'index',
    // 禁止访问模块
    'deny_module_list' => ['common'],
    // 默认控制器名
    'default_controller' => 'Index',
    // 默认操作名
    'default_action' => 'index',
    // 默认验证器
    'default_validate' => '',
    // 默认的空模块名
    'empty_module' => '',
    // 默认的空控制器名
    'empty_controller' => 'Error',
    // 操作方法前缀
    'use_action_prefix' => false,
    // 操作方法后缀
    'action_suffix' => '',
    // 自动搜索控制器
    'controller_auto_search' => false,

    // +----------------------------------------------------------------------
    // | URL设置
    // +----------------------------------------------------------------------

    // PATHINFO变量名 用于兼容模式
    'var_pathinfo' => 's',
    // 兼容PATH_INFO获取
    'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
    // pathinfo分隔符
    'pathinfo_depr' => '/',
    // HTTPS代理标识
    'https_agent_name' => '',
    // IP代理获取标识
    'http_agent_ip' => 'X-REAL-IP',
    // URL伪静态后缀
    'url_html_suffix' => 'html',
    // URL普通方式参数 用于自动生成
    'url_common_param' => false,
    // URL参数方式 0 按名称成对解析 1 按顺序解析
    'url_param_type' => 0,
    // 是否开启路由延迟解析
    'url_lazy_route' => false,
    // 是否强制使用路由
    'url_route_must' => false,
    // 合并路由规则
    'route_rule_merge' => false,
    // 路由是否完全匹配
    'route_complete_match' => false,
    // 使用注解路由
    'route_annotation' => false,
    // 域名根,如thinkphp.cn
    'url_domain_root' => '',
    // 是否自动转换URL中的控制器和操作名
    'url_convert' => true,
    // 默认的访问控制器层
    'url_controller_layer' => 'controller',
    // 表单请求类型伪装变量
    'var_method' => '_method',
    // 表单ajax伪装变量
    'var_ajax' => '_ajax',
    // 表单pjax伪装变量
    'var_pjax' => '_pjax',
    // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
    'request_cache' => false,
    // 请求缓存有效期
    'request_cache_expire' => null,
    // 全局请求缓存排除规则
    'request_cache_except' => [],
    // 是否开启路由缓存
    'route_check_cache' => false,
    // 路由缓存的Key自定义设置(闭包),默认为当前URL和请求类型的md5
    'route_check_cache_key' => '',
    // 路由缓存类型及参数
    'route_cache_option' => [],

    // 默认跳转页面对应的模板文件
    'dispatch_success_tmpl' => Env::get('think_path') . 'tpl/dispatch_jump.tpl',
    'dispatch_error_tmpl' => Env::get('think_path') . 'tpl/dispatch_jump.tpl',

    // 异常页面的模板文件
    'exception_tmpl' => Env::get('think_path') . 'tpl/think_exception.tpl',

    // 错误显示信息,非调试模式有效
    'error_message' => '页面错误!请稍后再试~',
    // 显示错误信息
    'show_error_msg' => false,
    // 异常处理handle类 留空使用 \think\exception\Handle
    'exception_handle' => '',
    //插件路径
    'addon_path' => './addons/',
];

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

框架设计之初就硬性要求必须要实现多模块应用架构模式,因此这里我们需要了解几个参数:

`app_multi_module`:开启对多模块应用支持,值为`true`;
`auto_bind_module`:入口自动绑定模块,值为`true`;
1
2

实现多模块应用架构模式有两种实现方式,下面我们做详细的介绍:

  • 第一种:入口自动绑定模块

默认情况下,框架的所有模块全部统一走index.php入口,模块包括网站模块(index)后台模块(admin)接口模块(api)WAP站模块(m)脚本模块(script),由于我们开启了多模块'app_multi_module' => true和入口自动绑定'auto_bind_module' => true的支持,所以模块绑定规则为:

`www`域名绑定模块`index`,比如:`www.demo.com`;
`admin`域名绑定模块`admin`,比如:`admin.demo.com`;
`api`域名绑定模块`api`,比如:`api.demo.com`;
`m`域名绑定模块`m`,比如:`m.demo.com`;
`script`域名绑定模块`script`,比如:`script.demo.com`;
1
2
3
4
5
  • 第二种:模块独立入口文件

根据上述所述,我们了解了如何开启多模块和入口绑定支持,也明白了域名及模块之前的绑定规则,不知道大家是否有发现系统的模块是固定的,如后台模块名admin,当前如果我们的域名诸如是admin.demo.com是可以通过规则匹配进行正常访问的,但是在实际项目中我们的域名由于某种原因并不一定绑定是admin.xxx.com等形式,比如平台的官方演示系统域名manage.pro5.1.rxthink.cn,二级域名为manage.pro5.1此时无法与系统的admin模块进行友好的绑定,会自动跳转到默认index模块,那么我们如何来解决这个问题呢?那就是给每个模块单独建立一个入口文件,然后在入口文件中进行模块绑定,需要注意的是独立入口这种方式需要在虚拟主机中指定当前域名是从哪个具体的入口文件启动的,如下所示:

网站入口文件(index.php):

<?php

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->run()->send();

1
2
3
4
5
6
7
8
9
10
11
12
13

此入口文件默认绑定的是index模块;

后台入口文件(admin.php):

<?php

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind('admin')->run()->send();

1
2
3
4
5
6
7
8
9
10
11
12
13

bind('admin')可以看出admin.php入口文件绑定的模块是admin模块;

API接口入口文件(api.php):

<?php

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind('api')->run()->send();

1
2
3
4
5
6
7
8
9
10
11
12
13

bind('api')可以看出api.php入口文件绑定的模块是api模块;

WAP站入口文件(m.php):

<?php

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind('m')->run()->send();

1
2
3
4
5
6
7
8
9
10
11
12
13

bind('m')可以看出m.php入口文件绑定的模块是m模块;

脚本入口文件(script.php):

<?php

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get('app')->bind('script')->run()->send();

1
2
3
4
5
6
7
8
9
10
11
12
13

bind('script')可以看出script.php入口文件绑定的模块是script模块;

# 虚拟主机

应用配置一节中我们详细的介绍了如何实现多模块以及模块与域名的绑定,分为两种情况,一种是入口自动绑定模块,另一种是建立独立模块入口文件,要想项目可以正常的访问,配置虚拟主机是必不可少的步骤,下面我们分不同的情况分别说明一下这两种方式的虚拟主机如何配置:

  • 入口自动绑定模块虚拟主机配置

Apache虚拟主机配置

<VirtualHost *:80>
    ServerAdmin rxthink@gmail.com
    ServerName demo.com
    ServerAlias www.demo.com admin.demo.com m.demo.com api.demo.com script.demo.com
    DocumentRoot "D:\sites\RXThinkCMF\RXThinkCMF_TP5.1_PRO\public"
    ErrorLog "logs/demo.com-error.log"
    CustomLog "logs/demo.com-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin rxthink@gmail.com
	ServerName images.demo.com
    DocumentRoot "D:\sites\RXThinkCMF\RXThinkCMF_TP5.1_PRO\public\uploads\img"
    ErrorLog "logs/demo.com-error.log"
    CustomLog "logs/demo.com-access.log" common
</VirtualHost>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

说明:第一个虚拟主机是配置各模块的域名解析,第二个域名是专门为图片域名images.demo.com配置的,并且指向指定的图片存放目录;

Nginx虚拟主机配置

# 模块域名配置
server {
    listen       80;
    server_name  www.demo.com admin.demo.com m.demo.com api.demo.com script.demo.com;
    root    /www/webroot/RXThink/v5.1/web/public;
    index   index.php;
    charset utf-8;

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   html;
    }
    error_log /www/logs/nginx/demo.com.error.log;
    access_log /www/logs/nginx/demo.com.access.log;


    if (!-e $request_filename) {
        rewrite  ^(.*)$  /index.php?s=$1  last;
        break;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    location ~ /\.ht {
        deny  all;
    }
}

# 图片域名配置
server {
    listen       80;
    server_name  images.demo.com;
    root    /www/webroot/RXThink/V5.1/web/public/uploads/img;
    index   index.php;
    charset utf-8;

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp)$
    {
            expires         365d;
            if ( !-e $request_filename ) {
                    rewrite ^/(.+)$ /cut.php?path=$1 last;
            }
    }

    #single php entry
    location = /cut.php {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/webroot/RXThink/V5.1/pro/public/uploads/img/cut.php;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    location ~ /\.ht {
        deny  all;
    }
}
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
  • 本地hosts文件配置:切记如果是本地部署时请在本地hosts文件中写入本地127.0.0.1解析,以上为例hosts配置为:127.0.0.1 www.demo.com admin.demo.com m.demo.com api.demo.com script.demo.com images.demo.com

# 缓存配置

为了系统的性能提升和运行效率,框架底层已经友好的封装了继承了缓存功能,只需要开启即可,根据系统设计要求,框架目前支持两种缓存模式:文件缓存Redis缓存,缓存配置文件内容如下:

<?php

// +----------------------------------------------------------------------
// | 缓存设置
// +----------------------------------------------------------------------
$cache_type = Env::get('cache.type', '');
if ($cache_type === 'redis') {
    $cache = [
        // 驱动方式
        'type' => 'redis',
        // 服务器地址
        'host' => Env::get('cache.host', '127.0.0.1'),
        // 服务器端口号
        'port' => Env::get('cache.port', '6379'),
        // 密码
        'password' => '',
        // 超时时间(单位:毫秒)
        'timeout' => 3600,
        // 缓存数据库库号
        'select' => 1,
        // 缓存前缀
        'prefix' => Env::get('cache.prefix', 'RX_'),
        // 缓存有效期 0表示永久缓存
        'expire' => 0,
    ];
} elseif ($cache_type === 'memcache') {
    $cache = [
        // 驱动方式
        'type' => 'Memcache',
        // 服务器地址
        'host' => Env::get('cache.host', '127.0.0.1'),
        // 服务器端口号
        'port' => Env::get('cache.port', '6379'),
        // 超时时间(单位:毫秒)
        'timeout' => 3600,
        // 缓存前缀
        'prefix' => Env::get('cache.prefix', 'RX_'),
        // 缓存有效期 0表示永久缓存
        'expire' => 0,
    ];
} else {
    $cache = [
        // 驱动方式
        'type' => 'File',
        // 缓存保存目录
        'path' => '',
        // 缓存前缀
        'prefix' => '',
        // 缓存有效期 0表示永久缓存
        'expire' => 0,
    ];
}

return $cache;

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

如以上内容所示,缓存驱动的模式从环境变量中获取Env::get('cache.type', '')默认系统使用的是redis缓存,所以再使用之前,需要开启redis服务的支持,根据缓存模式的不同,各自的参数及配置值也是有所差异的,有关配置参数有不明白请查询相关资料;

# 短信配置

在众多的场景中,我们或多或少的都会使用到短信发送的功能,因此在设计系统时已经把这块功能集成进去了,特地为短信发送单独建立一个配置文件sms.php,文件内容如下:

/**
 * 短信配置类
 */
return [
    // 阿里云短信
    'aliyunsms' => [
        'accessKeyId' => 'LTAIiiZGTbjvJRFMAE',
        'accessKeySecret' => 'xkki8v10wV3uUx637mk4eNNykTaMzNFGH',
        'signName' => '研发中心',
        'templateCode' => 'SMS_18122342354',
        'templateParam' => '',
    ],
    // 更多短信平台账号请依次配置。。。
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14

根据上述得知,实现短信发送功能需要安装阿里短信SDK依赖包alibabacloud/sdk,根据业务实现我们封装了短信发送工具类及发送短信方法sendSms,具体内容请移至框架扩展目录extend中的AliSms.php文件进行查询;

# 布局配置

上述我们所描述的都是公共配置中的内容,当然我们也可以针对具体的业务层模块进行局部配置,此处我们以后台admin模块举例说明,根据系统架构设计需求我们开启多模板布局的功能,因此我们要针对模板布局配置一下参数,配置文件为config/admin/template.php,内容如下:

<?php

// +----------------------------------------------------------------------
// | 模板设置
// +----------------------------------------------------------------------

return [
    // 是否开启模板编译缓存,设为false则每次都会重新编译
    'tpl_cache'          => false,
    // 布局模板开关
    'layout_on'          => true,
    // 布局模板入口文件
    'layout_name'        => 'public/layout',
    // 布局模板的内容替换标识
    'layout_item'        => '{__CONTENT__}',
    // 视图输出字符串内容替换
    'tpl_replace_string' => [
        '__STATIC__'    => '/static',
        '__ADMIN__'     => '/static/admin',
        '__JS__'        => '/static/admin/js',
        '__CSS__'       => '/static/admin/css',
        '__IMAGES__'    => '/static/admin/images',
    ],
];

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

参数分析:

模板布局配置的参数主要有tpl_cachelayout_onlayout_namelayout_itemtpl_replace_string,其中layout_name是设置布局文件,默认是public/layout文件;参数tpl_replace_string是模板替换标签,如__ADMIN____IMAGES__声明之后可以全局使用,无需在写复杂的路径;

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

<?php

/**
 * 后台全局配置文件
 * @author 牧羊人
 * @date 2019/4/28
 */
return [

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

    // 支付方式
    'pay_type' => [
        1 => '支付宝',
        2 => '微信',
        3 => '其他',
    ],

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

    // 菜单节点
    'menu_func' => [
        1 => [
            'name' => 'index',
            'title' => '查看',
            'checked' => true,
        ],
        2 => [
            'name' => 'add',
            'title' => '新增',
            'checked' => true,
        ],
        3 => [
            'name' => 'edit',
            'title' => '编辑',
            'checked' => true,
        ],
        4 => [
            'name' => 'drop',
            'title' => '删除',
            'checked' => true,
        ],
        5 => [
            'name' => 'detail',
            'title' => '详情',
            'checked' => false,
        ],
        6 => [
            'name' => 'copy',
            'title' => '复制',
            'checked' => false,
        ],
        7 => [
            'name' => 'cache',
            'title' => '缓存',
            'checked' => false,
        ],
        8 => [
            'name' => 'batchDrop',
            'title' => '批量删除',
            'checked' => true,
        ],
        9 => [
            'name' => 'batchCache',
            'title' => '批量缓存',
            'checked' => true,
        ],
    ],

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

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

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

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

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

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

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

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

    // 文章状态
    'article_status' => [
        1 => '待审核',
        2 => '已通过',
        3 => '未通过',
    ],

    // 切图类型
    'image_cut_type' => [
        1 => '文章切图',
        2 => '用户头像切图',
    ],

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

];

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

系统加载完成后,当前配置文件会默认加载到系统中,此时我们可以使用框架自带的获取配置参数的方式获取参数值,如获取性别配置信息方式为config('config.gender_list')等等,以此类推;