第一: 系统运行模式
ThinkAdmin 系统运行模式有两种,分别为 开发模式、生产模式;
需要在系统后台的 系统参数管理 切换模式,如果出现页面无法访问或报错,请删除 runtime
目录再尝试。
开发模式
在开发模式下,系统只会进行轻度缓存,大部分系统数据不会进行缓存,性能偏低。
开发人员或在功能调试时使用,系统异常时会显示详细的错误信息,同时还会记录操作日志及数据库 SQL 语句信息。
生产模式
在生产模式下,系统会进行重度缓存,包括数据库字段缓存、模板编译缓存、系统参数配置等缓存,性能最优。
项目正式部署上线后使用,系统异常时统一显示 “页面错误!请稍后再试~”,只记录重要的异常日志信息,强烈推荐上线后使用此模式。
第二: 系统权限管理
ThinkAdmin V6 的权限管理基于标准 RBAC 简化而来,加入注解权限配置,可精确控制到按钮操作权限。
权限管理涉及 功能节点、权限管理、菜单管理、用户管理,去除了繁杂的功能节点,使得权限管理起来更简单;
其中 功能节点 是由系统自动维护,根据控制器的代码注释实现刷新。如需要加入权限控制的访问方法,需要写上标准的块注释。
注解规则
注解规则案例如下,
@auth
优先级高于@login
配置,通常只需要配置@auth
即可添加到后台权限配置。/** * 操作方法的名称 * @auth true # 表示需要验证权限 * @menu true # 添加系统菜单节点 * @login true # 强制登录才可访问 */ public function index(){ // @todo }
注释中有效注释解析如下:
- 其中
@auth true
表示访问需要配置授权才能访问- 其中
@menu true
在编辑菜单时自动提示节点可选项- 其中
@login true
强制需要登录才能访问该操作
权限管理
创建好权限后,需要给权限配置勾选可以访问的功能节点。
如:权限 A
只能访问哪些节点,就需要勾选对应的功能节点。
在授权配置时,涉及到应用名称显示,可以在 config/app.php
配置 app_names
中文名称,名称在显示前会经过 lang()
语言转换处理。 如果不希望指定应用不希望授后台权限控制,可以配置 rbac_ignore
选项。
return [ // ... // 其他参数未显示 'app_names' => [ 'admin' => '系统管理', 'wechat' => '微信管理', 'plugin-account' => '账号管理' ], // 忽略 RBAC 权限检查,可以配置多个应用 'rbac_ignore' => [ 'index', 'wap', 'api' ], // 配置 RBAC 登录地址,通常不需要配置 'rbac_login' => '' ];
权限配置截图
菜单管理
菜单最多支持三级,上 1 级 + 左 2 级。
菜单创建与编辑的表单,要特别注意菜单对应的节点规范。
如:
admin/menu/index
,注意要掉前后的斜线,目前不支持外部链接权限管理。如果在控制器方法的节点注释中含
menu true
则该节点会出现在自动提示列表中,可以直接从列表选取。
菜单管理截图
用户管理
在后台添加用户账号后,需要将上面配置好的权限分配给用户账号,该用户账号登录后就可以显示对应菜单及访问权限。
注意:默认账号 admin
为系统的超级用户,拥有系统所有节点权限,超级用户的账号可以在 config/app.php
进行修改
用户管理截图
第三:访问路由配置
ThinkAdmin 是基于 ThinkPHP6 的多应用平台,对于路由与 ThinkPHP5 有很大区别。
这里路由分为全局路由和应用路由。
全局路由配置
全局路由可以监听根路径,如果
/my-test.html
等,全局路由需要在每个应用的sys.php
或插件服务类进行动态注册。如:
admin/sys.php
# 访问入口 index.php # 访问地址 https://yourdomain.com/demo # 路由配置 app/admin/sys.php 当然放其他应用目录也是一样的 app()->route->get('demo','myself/test'); //-> /myself/test
应用路由配置
路由需要按模块配置,每个模块独立管理。
如:
admin/route/demo.php
# 访问入口 index.php # 访问地址 https://yourdomain.com/admin/demo # 路由配置 app/admin/route app()->route->get('demo','test'); //-> /admin/test # 访问入口 index.php # 访问地址 https://yourdomain.com/admin/demo2 # 路由配置 app/admin/route app()->route->any('demo2','user/index'); //-> /admin/user/index
做应用绑定,可以去除模块名称 如入口为
admin.php
,自动绑定应用为admin
# 访问入口 admin.php # 访问地址 https://yourdomain.com/demo # 路由配置 app/admin/route app()->route->get('demo','test') -> /admin/test
由于多应用模式,默认绑定应用
index
# 访问入口 index.php # 访问地址 https://yourdomain.com/demo # 路由配置 app/index/route app()->route->get('demo','test'); //-> /index/demo
用
app()->route
只是一种调用方式,也可以用return
返回数组。
第四:系统异步任务
系统异步任务是 ThinkAdmin 的一大特色,实现了 windows 及 linux 平台多进程并列执行任务,大大提升了任务处理能力。
监听进程 LISTEN 启动之后,理论上会每隔 0.5 秒扫描一次数据表,当扫描到有需要执行的任务时会创建独立 PHP-CLI 进程。
特别注意: 不能同时启动多个监听进程 LISTEN 以防止重复执行任务,建议使用 START 指令来启动监听 LISTEN 进程。
守护进程管理
创建定时任务去执行检测监听进程 LISTEN 的指令 START,当发现监听进程 LISTEN 未运行时会自动创建;
如果是 linux 服务器,建议指定用户运行,防止
cli
与cgi
|fpm
三种运行方式的缓存文件权限冲突,排错时需检查日志;建议指定用户运行
sudo -u www php think xadmin:queue start
,可以直接在系统后台的任务管理复制执行指令再配置到定时任务;任务进程创建是通过 PHP 函数 exec 实现,所以函数 exec 不能被禁用,当执行异常时请根据错误提示对 PHP 运行环境进行调整;
进程管理相关指令
执行
php think xadmin:queue stop
# 停止所有正在执行的异步任务进程执行
php think xadmin:queue query
# 查询当前所有正在执行的任务进程执行
php think xadmin:queue start
# 开启异步任务守护进程(后台进程)执行
php think xadmin:queue listen
# 启动异步任务监听进程(前台进程)执行
php think xadmin:queue status
# 查看当前守护进程的后台运行状态创建异步任务
可以使用
sysqueue()
函数或在控制器中使用$this->_queue()
创建任务队列。// 直接使用函数创建任务,获取到任务编号 $code = sysqueue($title, $command, $later = 0, $data = [], $rscript = 1, $loops = 0); // 在控制器中创建任务,获取到任务编号 $queue = $this->_queue($title, $command, $later = 0, $data = [], $rscript = 0, $loops = 0); $code = $queue->code; // 如果要在任务中创建新任务,需要注意创建新的任务对象哦,不然会导致原任务异常 $queue = QueueService::instance([],true); // 创建新任务服务,不替换原任务对象 $queue->register();// 注册新任务内容 // 在任务中可以使用 $this->queue 获取当前任务的数据(在任务继承了 Queue 或 QueueService 的情况下)) $this->queue->code; // 获取当前任务编号 $this->queue->data; // 获取当前任务参数 $this->queue->record; // 获取当前任务记录 // 设置当前任务进度数据及成功状态或失败状态(在任务继承了 Queue 或 QueueService 的情况下) $this->setQueueError(); // 设置失败的消息并结束执行 $this->setQueueSuccess(); // 设置成功的消息并结束执行 $this->setQueueProgress(); // 设置运行进度并继续执行
以上两种方式都可以指定
任务标题
、执行任务内容
、执行延时时间
、任务绑定数据
、允许重复创建
、是否循环执行
等。有些任务,在待处理和处理中是不需要再创建重复任务的,
$rscript
就需要设置为0
,这是根据标题来识别的,所以标题也可以适当加上个性名称。自建的异步处理是多进程任务处理,其中
windows
是基于wmic
指令创建后台进程实现的,而linux
则是通过&
符实现。因为是异步并列执行,建议自行控制下任务数据,免得过多消耗系统资源而影响项目正常使用。
在部署时,通常我们只需要创建定时器去执行
php think xadmin:queue start
就可以守护异步任务监听进程。目前
ThinkAmdin V6
自定义异步任务机制支持两种规则机制:自定义单独的处理类,需要继承
think\admin\Queue
抽象类,实现execute
方法,参数为任务绑定的参数$data
;自定义
ThinkPHP
指令,默认使用Console::call()
去尝试执行传入的指令,指令可以继承think\admin\Command
;异步任务进度
ThinkAdmin 支持任务完成状态跟进。
后端创建任务之后可以获得任务编号,任务编号以字母
Q
开头前端可以使用
$.loadQueue(CODE)
展示任务完成进度及数据后端任务可以使用
$this->setQueueProgress()
任务完成进度后端任务可以使用
$this->setQueueError()
设置任务已经失败后端任务可以使用
$this->setQueueSuccess()
设置任务已经完成具体参数可以查看方法源代码,进度数值为百分比,如
50
表示完成了50%
基于控制器实现,前端
data-queue=URL
,后端调用$this->_queue()
方法创建任务
模板替换变量