内容简介:大道至简 · 原生框架 ThinkAdmin v5 是一个基于 ThinkPHP 5.1 和 ThinkLibrary 开发的后台管理系统。 我们致力于二次开发底层框架,提供完整的组件及API,基于此框架可以快速开发应用,另外项目安装及二次开发可...
大道至简 · 原生框架
ThinkAdmin v5 是一个基于 ThinkPHP 5.1 和 ThinkLibrary 开发的后台管理系统。
我们致力于二次开发底层框架,提供完整的组件及API,基于此框架可以快速开发应用,另外项目安装及二次开发可以参考 ThinkPHP 官方文档,数据库文件摆放在项目根目录下。
ThinkAdmin 非常适用快速二次开发,默认集成 微信开发组件,支持微信服务号,微信支付,支付宝支付,阿里云OSS存储,七牛云存储,本地服务器存储。
注意事项 :
- 项目测试需要自行搭建环境导入数据库( admin_v5.sql )并修改配置( config/database.php );
- 若操作提示“测试系统禁止操作”等字样,需要删除演示路由配置( route/demo.php )或清空路由文件;
- 当前版本使用 ThinkPHP 5.1.x,对 PHP 版本标注不低于 PHP 5.6,具体请阅读 ThinkPHP 官方文档;
- 环境需开启 PATHINFO,不再支持 ThinkPHP 的 URL 兼容模式运行(源于如何优雅的展示);
登录页面
后台首页
技术支持
开发文档:http://doc.thinkadmin.top/thinkadmin-v5
开发前请认真阅读 ThinkPHP 官方文档会对您有帮助哦!
本地开发命令php think run
,使用http://127.0.0.1:8000
访问项目。
PHP 开发技术交流( QQ 群 513350915)
代码仓库
ThinkAdmin 为 MIT 协议开源项目,安装使用或二次开发不受约束,欢迎 fork 项目。
部分代码及功能组件来自互联网,若有异议可以联系作者进行删除。
- 在线体验地址:https://demo.thinkadmin.top (账号和密码都是 admin )
- Gitee仓库地址:https://gitee.com/zoujingli/ThinkAdmin
- Github仓库地址:https://github.com/zoujingli/ThinkAdmin
框架指令
- 执行
build.cmd
可更新Composer
插件,会删除并替换vendor
目录 - 执行
php think run
启用本地开发环境,访问http://127.0.0.1:8000
1. 线上代码更新
- 执行
php think xsync:admin
从线上服务更新admin
模块的所有文件(注意文件安全) - 执行
php think xsync:wechat
从线上服务更新wechat
模块的所有文件(注意文件安全) - 执行
php think xsync:plugs
从线上服务更新plugs
静态插件的部分文件(注意文件安全) - 执行
php think xsync:service
从线上服务更新service
模块的所有文件(注意文件安全) - 执行
php think xsync:config
从线上服务更新config
项目配置的部分文件(注意文件安全)
2. 微信资料管理
- 执行
php think xfans:all
更新已经对接的公众号全部列表 - 执行
php think xfans:list
更新已经对接的公众号粉丝列表 - 执行
php think xfans:tags
更新已经对接的公众号标签列表 - 执行
php think xfans:black
更新已经对接的公众号黑名单列表
3. 守护进程管理
- 执行
php think xtask:reset
重启消息任务守护进程 - 执行
php think xtask:start
启动消息任务守护进程 - 执行
php think xtask:state
查询消息任务守护进程 - 执行
php think xtask:stop
暂停消息任务守护进程
4. 其它自定工具
- 执行
php think xclean:session
清理无效的会话SESSION文件 - 执行
php think xclean:store
清理无效的订单信息及定时任务
ThinkAdmin 后台权限管理
ThinkAdmin 的权限管理基于标准RBAC
简化而来,去除了繁杂的节点管理,使得权限管理起来更简单,具体包含节点管理、权限管理、菜单管理、用户管理。
一、节点管理(系统自动维护)
自 ThinkAdmin v5 版本开始,系统节点使用代码注释实现;
需要加入权限控制的访问方法,需要写上标准的块注释。如:
/**
* 操作的名称
* @auth true # 表示需要验证权限
* @menu true # 在菜单编辑的节点可选项
*/
public function index(){
// @todo
}
- 此版本的权限使用注解实现
- 注释必需使用标准的块注释,如下案例
- 其中
@auth true
表示访问需要权限验证 - 其中
@menu true
显示在菜单编辑的节点可选项
二、权限管理(相当于角色管理)
创建好权限后,需要给权限配置好需要控制的节点的列表。
如:权限A只能访问哪些节点,就需要勾选对应功能的节点。
三、菜单管理(最多支持三级)
菜单创建与编辑里,要特别注意菜单对应的节点规范。
如:admin/menu/index
如果在节点注释中含menu true
则该节点会出现在自动提示中。
四、用户管理(设置密码及权限)
添加用户后,需要给用户配置对应权限。
注意admin
为超级用户,不需要配置权限,因为他拥有后台所有权限。
五、数据列表输出
ThinkLibrary 与 ThinkPHP 组合起来就是现在的 ThinkAdmin v5,都是基于 Composer 来管理;
如果需要使用到 ThinkLibrary 里面的功能,控制器需要继承 \library\Controller
类。
数据列表操作
在控制器访问中只需加入$this->page(表名)
可以显示默认数据表的分页列表;
如果需要对列表进行条件处理,可以使用查询器来实现。如:
// 创建查询器
$query = $this->_query('表名')->where(['status'=>'1']);
// 查询器分页输出
$query->page();
注意:在 ThinkPHP 5.1 之后,控制器不需要直接返回内容了,函数_page
里面使用HttpResponseException
直接输出机制。
另外对于url
输入的变量也可以快速输入到查询器条件中,如:
// 创建查询器
$query = $this->_query('表名');
// 切入url参数,接收 username 和 sex 并使用 like 查询,接收 status 使用 eq 查询
$query->like('username,sex')->equal('status');
// 查询器分页输出
$query->page();
有时候,url
输入的名称与数据字段不一定是匹配的,所以需要用到别名,这里就需要按规则写条件,如:
// 切入url参数,接收 username_alias 和 sex 并使用 like 查询,接收 user_status 使用 eq 查询
// 这里用到了别名,username_alias 对应数据库中的 username 字段,user_status 对应数据库的 status 字段
$query = $this->_query('表名')->like('username#username_alias,sex')->equal('status#user_status');
// 查询器分页输出
$query->page();
输出额外数据到模板,与 ThinkPHP 操作无异,如:
// 额外列表数据赋值到模板,模板里直接使用变量 $userList
$this->userList = Db::name('User')->where(['status'=>'1'])->select();
// 切入url参数,接收 username 和 sex 并使用 like 查询,接收 status 使用 eq 查询
$query = $this->_query('表名')->like('username,sex')->equal('status');
// 查询器分页输出
$query->page();
数据回调处理
对于通过page
方法实现的即将显示到模板的列表,还可以进行引用二次处理,如:
protected function _page_filter(&$data){
// 这里可以对 $data 进行二次处理,注意是引用
}
### 当一个控制器存在多个page操作时,可以指定回调前缀
protected function _index_page_filter(&$data){
// 精准回调对 $data 进行二次处理,注意是引用
}
下面提供一个完整的DEMO
/**
* 系统操作日志
* @auth true
* @menu true
* @throws \think\Exception
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function index()
{
$this->title = '系统操作日志';
$query = $this->_query($this->table)->like('action,node,content,username,geoip');
$query->dateBetween('create_at')->order('id desc')->page();
}
/**
* 列表数据处理
* @param array $data
* @throws \Exception
*/
protected function _index_page_filter(&$data)
{
$ip = new \Ip2Region();
foreach ($data as &$vo) {
$result = $ip->btreeSearch($vo['geoip']);
$vo['isp'] = isset($result['region']) ? $result['region'] : '';
$vo['isp'] = str_replace(['内网IP', '0', '|'], '', $vo['isp']);
}
}
六、表单自动操作
ThinkLibrary 表单处理可能简化数据保存与更新操作,
控制器只需要一行代码,就可以实现数据添加与更新,如:
$this->_form('表名','模板名称');
当然,这里使用了HttpResponseException
直接输出,不需要返回内容的。
需要给模板额外赋值,可以直接在控制器$this->username='你的值';
这样在模板中可以直接使用$username
变量;
如果提交的表单数据包含指定主键时则为更新操作,否则为添加记录;
另外对表单还有callback
操作(参数使用引用),统一名称为protected function _form_filter(&$data)
另外关于模板的使用,可以参考下demo哦。
数据回调处理
对于表单操作,Controller
内置了两个回调方法,如:
[_ACTION]_form_filter($vo)
[_ACTION]_form_result($result, $vo)
当回调函数返回false
时,Controller
默认的行为将不会执行。
数据回调处理DEMO
/**
* 添加拼团
* @auth true
*/
public function add()
{
$this->title = '添加拼团';
$this->_form($this->table, 'form');
}
/**
* 编辑拼团
* @auth true
*/
public function edit()
{
$this->title = '编辑拼团';
$this->_form($this->table, 'form');
}
/**
* 添加拼团商品表单处理
* @param array $data
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
protected function _form_filter(&$data)
{
if (empty($data['code'])) $data['code'] = Data::uniqidNumberCode(10);
if ($this->request->isGet()) {
$map = ['package_code' => $data['code']];
$data['list'] = Db::name('StoreGoodsGroupList')->where($map)->select();
} else {
if (empty($data['logo'])) $this->error('请上传商品图标图片');
if (empty($data['image'])) $this->error('请上传商品展示图片');
if (empty($data['item_number'])) $this->error('请添加套卡包含内容');
$all = [];
foreach (array_keys($data['item_number']) as $key) $all[] = [
'package_code' => $data['code'],
'goods_code' => $data['item_code'][$key],
'goods_type' => $data['item_type'][$key],
'goods_title' => $data['item_title'][$key],
'goods_number' => $data['item_number'][$key],
];
try {
Db::transaction(function () use ($data, $all) {
$map = ['package_code' => $data['code']];
Db::name('StoreGoodsGroupList')->where($map)->delete();
Db::name('StoreGoodsGroupList')->insertAll($all);
});
} catch (Exception $e) {
$this->error("商品详情处理失败,{$e->getMessage()}");
}
}
}
/**
* 表单结果处理
* @param boolean $result
*/
protected function _form_result($result)
{
if ($result && $this->request->isPost()) {
$this->success('商品编辑成功!', 'javascript:history.back()');
}
}
如果是在 ThinkAdmin 后台基于 admin.js 的情况下,可使用 form[data-auto] 来与 $this->_form 配合使用。
七、数据删除自动处理
数据删除同样也只需要一行代码$this->_delete('表名');
前端只需要传入数据表的主键就可以了,不需要做额外处理。
1. 硬删除
如果数据表中不存在is_deleted
字段,则为硬删除。
2. 软删除
当前数据表中存在is_deleted
字段时,$this->_delete
则自动为软删除操作,
在列表操作时加上条件过滤下就可以正常操作。
数据回调处理
对于数据删除的结果,可以进行自定义处理,回调函数规则如:[_ACTION]_delete_result
下面提供一个完整的demo:
/**
* 删除系统权限
* @auth true
*/
public function remove()
{
$this->applyCsrfToken();
$this->_delete($this->table);
}
/**
* 删除结果处理
* @param boolean $result
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
protected function _remove_delete_result($result)
{
if ($result) {
$where = ['auth' => $this->request->post('id')];
Db::name('SystemAuthNode')->where($where)->delete();
$this->success("权限删除成功!", '');
} else {
$this->error("权限删除失败,请稍候再试!");
}
}
如果是在 ThinkAdmin 后台基于 admin.js 的情况下,可台使用 data-action 来与 $this->_delete 配合使用。
前端提交上来的主键值支持多个,以英文逗号分隔。
八、数据更新操作
数据更新主要用于 数据状态更新,比如:数据禁用,数据启用,状态更改
在服务端只需要一行代码$this->_save($this->table)
就可以实现更新操作。
前端需要提供需要修改的数据ID以及数据状态值,当然也可以后第二个参数指定(强烈建议配置第二个字段)
这个地方可能存在数据恶意修改的情况,所有指定第二个参数非常有必要。
下面提供一个完整的demo,数据禁用与启用操作:
/**
* 启用系统菜单
* @auth true
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function resume()
{
$this->applyCsrfToken();
$this->_save($this->table, ['status' => '1']);
}
/**
* 禁用系统菜单
* @auth true
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
public function forbid()
{
$this->applyCsrfToken();
$this->_save($this->table, ['status' => '0']);
}
如果是在 ThinkAdmin 后台基于 admin.js 的情况下,可台使用 data-action 来与 $this->_save 配合使用。
前端提交上来的主键值支持多个,以英文逗号分隔。
九、项目历史版本
体验账号及密码都是admin
ThinkAdmin v1 基于 ThinkPHP 5.0 开发
- 在线体验地址:https://v1.thinkadmin.top
- Gitee 代码地址:https://gitee.com/zoujingli/ThinkAdmin/tree/v1
- Github 代码地址:https://github.com/zoujingli/ThinkAdmin/tree/v1
ThinkAdmin v2 基于 ThinkPHP 5.0 开发
- 在线体验地址:https://v2.thinkadmin.top
- Gitee 代码地址:https://gitee.com/zoujingli/ThinkAdmin/tree/v2
- Github 代码地址:https://github.com/zoujingli/ThinkAdmin/tree/v2
ThinkAdmin v3 基于 ThinkPHP 5.1 开发
- 在线体验地址:https://v3.thinkadmin.top
- Gitee 代码地址:https://gitee.com/zoujingli/ThinkAdmin/tree/v3
- Github 代码地址:https://github.com/zoujingli/ThinkAdmin/tree/v3
ThinkAdmin v4 基于 ThinkPHP 5.1 开发
- 在线体验地址:https://v4.thinkadmin.top
- Gitee 代码地址:https://gitee.com/zoujingli/ThinkAdmin/tree/v4
- Github 代码地址:https://github.com/zoujingli/ThinkAdmin/tree/v4
ThinkAdmin v5 基于 ThinkPHP 5.1 开发(后台权限基于注解实现)
- 在线体验地址:https://v5.thinkadmin.top
- Gitee 代码地址:https://gitee.com/zoujingli/ThinkAdmin/tree/v5
- Github 代码地址:https://github.com/zoujingli/ThinkAdmin/tree/v5
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- React后台框架搭建
- 推荐一个React的管理后台框架
- Tplay — 基于 ThinkPHP 的后台管理框架
- Erupt Framework 正式开源,后台管理框架
- JPower:一个可以快速进入业务开发的后台框架
- erupt 1.6.16 已经发布,通用后台管理框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术:第4卷 第4册(双语版)
Donald E.Knuth / 苏运霖 / 机械工业出版社 / 2007-4 / 42.00元
关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一的珍贵源泉,无数读者都赞扬Knuth的著作对个人的深远影响。科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员们已经成功地应用他的“菜谱式”的解到日常问题上,所有人都由于Knuth在书中所表现出的博学、清晰、精确和高度幽默而对他无比敬仰。 为开始后续各卷的写作并更......一起来看看 《计算机程序设计艺术:第4卷 第4册(双语版)》 这本书的介绍吧!