后台模块

介绍

后台模块是 FastAdmin 开源后台框架的核心模块,提供了大量高效和实用的功能,方便开发者快速搭建项目的后台。

框架后台模块通过安全入口访问,比如:

https://demo.fastadmin.net/奇怪的文件名.php

在此仅做后台的流程介绍、核心类解析及相关功能模块功能使用介绍,如果需要查看前端开发文档,请前往相应章节查看文档。

后台功能模块

后台模块默认包含了控制台、常规管理、权限管理、插件管理、会员管理、分类管理(默认隐藏)、测试管理(用户自行生成)。

控制台

常规管理

在后台管理中一些基础配置,例如系统配置、附件管理、个人配置等功能都归属到该级栏目下面。

系统配置

用于管理系统的配置信息,包括站点标题、站点底部信息、邮件配置、字典配置等。

在开发中经常会遇到一些配置信息可以在后台进行修改的功能,此时我们在系统配置中进行增改操作。系统配置中的配置项不支持删除功能,如果需要删除配置项,需要删除数据库中fa_config表中相对应的行。

在系统配置中的添加一栏,我们可以自定义添加系统配置。以下是添加项的详细解释。

类型介绍
类型主要是字符、文本、数字、日期时间、列表、图片、文件、复选、单选、数组等类型
分组配置所属的分组
变量名变量名,只能使用数字、字母、下划线定义。在视图中可以使用{$site.变量名调用},在PHP中可以使用config('site.变量名')调用
变量标题配置对应显示的中文名称
变量值配置项的基础值
提示信息当配置项获得焦点时提示的文字信息
校验规则校验规则使用的是nice-validator的规则,可以查看:https://validator.niceue.com/docs/core-rules.html,多个规则使用;进行分隔
扩展属性用于给生成的DOM元素添加额外的扩展属性

系统配置支持多种数据类型,下面依次做简单介绍。

类型介绍
字符生成单行文本框
文本生成多行文本框
数字生成单行数字文本框
日期生成只可日期的日期选择框
时间生成输入时间的时间选择框
日期时间生成文本框且自动生成日期时间选择器
列表生成下拉列表框
列表(多)生成多选下拉列表框
图片生成单图文本框且上传或选择单图,带图片预览
图片(多)生成多图文本框且可上传或选择多张图,带图片预览
文件生成文本框且可上传或选择文件
文件(多)生成文本框且可上传或选择多个文件
复选生成复选框
单选生成单选框
数组生成一维数组输入列表且可动态添加和排序
自定义可以直接自定义元素的HTML代码
附件管理

附件管理可以管理前后台上传的文件资源,也可以在此上传资源到服务器或云存储。

附件管理中的删除只会删除数据库的记录,并不会删除对应的文件(云存储文件根据插件管理中配置的附件删除时是否同步删除文件判断是否删除对应的文件)。

当我们配置了第三方云储存插件时,附件管理中的添加将出现上传到第三方的按钮,此时我们的上传就是上传到第三方云存储

个人资料

用户修改和展示当前登录的管理员相关信息。

权限管理

管理员管理

用于管理后台管理员,包括添加、编辑、删除、禁用、启用等操作。

管理员日志

用于记录管理员的操作日志。

角色组

用于管理角色组,包括添加、编辑、删除、启用、禁用等操作。

菜单规则

用于配置菜单的权限控制。

插件管理

插件管理是FastAdmin的插件的控制面板,在插件管理中可以在线免费或付费购买安装 FastAdmin插件市场中的应用插件,也可以在插件管理中配置、禁用、启用、卸载、升级插件。

如果我们安装完插件是需要启用、刷新插件缓存、清除后台缓存才会生效。部分插件是没有后台管理菜单或前台访问页面。

会员管理

分类管理

默认隐藏,无实际功能,仅供开发者参考,可在菜单规则中显示。

测试管理

默认未生成,可通过快速开始章节由用户自行一键 CRUD 生成,主要用于开发者用户参考,开发者可以复制一份 fa_test 根据 FastAdmin 数据库规范自由修改数据表,然后通过一键生成 CRUD 重新生成。

流程介绍

首先需要知道FastAdmin的后台模块是禁用了路由功能,因此后台的操作都是根据URL进行分段解析,例如我们请求的是以下链接,其中example.php为你后台入口文件

https://www.example.com/example.php

则调用的是默认控制器application/admin/controller/Index.php中的默认方法index

如果我们请求的是。

https://www.example.com/example.php/dashboard/index

则调用的是application/admin/controller/Dashboard.php中的index方法

框架在调用到Dashboard.php这个控制器的index方法后会自动渲染application/admin/view/dashboard/index.html这个视图文件。

如果需要修改显示的内容,则修改这个这个视图文件即可。

但我们会发现有些控制器并没有index,add,edit,del等方法,但其实这些方法都在控制器的父类中采用了traits进行引入,我们转到父类application/common/controller/Backend.php就可以看到有一行

/**
 * 引入后台控制器的traits
 */
use \app\admin\library\traits\Backend;

这一行就相当于把文件application/admin/library/traits/Backend.php中的所有方法引入到当前控制器。如果我们需要覆盖基类定义的方法,则直接在当前控制器中定义即可。

基类解析

后台的所有功能模块的控制器都是继承于application/common/controller/Backend.php这个基类控制器。

在基类控制器中我们有定义一些基础属性和通用方法,首先我们看看基础属性。

/**
 * 无需登录的方法,同时也就不需要鉴权了
 * @var array
 */
protected $noNeedLogin = [];

/**
 * 无需鉴权的方法,但需要登录
 * @var array
 */
protected $noNeedRight = [];

/**
 * 布局模板
 * @var string
 */
protected $layout = 'default';

/**
 * 权限控制类
 * @var Auth
 */
protected $auth = null;

/**
 * 快速搜索时执行查找的字段
 */
protected $searchFields = 'id';

/**
 * 是否是关联查询
 */
protected $relationSearch = false;

/**
 * 是否开启数据限制
 * 支持auth/personal
 * 表示按权限判断/仅限个人 
 * 默认为禁用,若启用请务必保证表中存在admin_id字段
 */
protected $dataLimit = false;

/**
 * 数据限制字段
 */
protected $dataLimitField = 'admin_id';

/**
 * 数据限制开启时自动填充限制字段值
 */
protected $dataLimitFieldAutoFill = true;

/**
 * 是否开启Validate验证
 */
protected $modelValidate = false;

/**
 * 是否开启模型场景验证
 */
protected $modelSceneValidate = false;

/**
 * Multi方法可批量修改的字段
 */
protected $multiFields = 'status';

/**
 * 导入文件首行类型
 * 支持comment/name
 * 表示注释或字段名
 */
protected $importHeadType = 'comment';

其次我们来看下通用的方法


/**
 * 加载语言文件
 * @param string $name
 */
protected function loadlang($name)
{

}

/**
 * 渲染配置信息
 * @param mixed $name 键名或数组
 * @param mixed $value 值 
 */
protected function assignconfig($name, $value = '')
{

}

/**
 * 生成查询所需要的条件,排序方式
 * @param mixed $searchfields 快速查询的字段
 * @param boolean $relationSearch 是否关联查询
 * @return array
 */
protected function buildparams($searchfields = null, $relationSearch = null)
{

}

/**
 * 获取数据限制的管理员ID
 * 禁用数据限制时返回的是null
 * @return mixed
 */
protected function getDataLimitAdminIds()
{

}

/**
 * Selectpage的实现方法
 * 
 * 当前方法只是一个比较通用的搜索匹配,请按需重载此方法来编写自己的搜索逻辑,$where按自己的需求写即可
 * 这里示例了所有的参数,所以比较复杂,实现上自己实现只需简单的几行即可
 * 
 */
protected function selectpage()
{
}

以上的属性和方法我们都可以通过在当前控制器定义来达到覆盖的目的。

文档最后更新时间:2023-12-15 23:27:34
著作权归应用插件开发者所有,未经许可,禁止转载、复制此文档的任何内容。