内容简介:大道至简 · 原生框架 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 已经发布,通用后台管理框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
PHP与MySQL权威指南
吴津津、田睿、李云、刘昊 / 机械工业出版社华章公司 / 2011-10 / 118.00元
PHPChina官方出品,Discuz!创始人戴志康、UCHome创始人李国德、ThinkPHP创始人刘晨、PHPCMS项目负责人王参加等联袂推荐。 本书是目前为止最全面的关于PHP与MySQL开发技术的书籍之一,系统而全面地讲解了PHP与MySQL技术的方方面面,适合初中级的PHP程序员系统地学习;本书也是目前为止首本系统而深入地讲解UCenter、Discuz!、UCHome、ShopN......一起来看看 《PHP与MySQL权威指南》 这本书的介绍吧!