FastAdmin是一款基于ThinkPHP5+Bootstrap的极速后台开发框架。
安装
命令行安装
- 克隆FastAdmin到你本地
- 进入目录
- 下载前端插件依赖包
- 下载PHP依赖包
- 一键创建数据库并导入数据
1
| php think install -u 数据库用户名 -p 数据库密码
|
- 添加虚拟主机并绑定到
fastadmin/public
目录
命令行
一键生成CRUD
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
| php think crud -t test
php think crud -t test -u 1
php think crud -t test -d 1
php think crud -t test -c mydir/test
php think crud -t test_log -c testlog
php think crud -t test -m testmodel
php think crud -t test -r category -k category_id -p id
php think crud -t test --setcheckboxsuffix=list --setcheckboxsuffix=data
php think crud -t test --imagefield=image --setcheckboxsuffix=img
php think crud -t test --relation=category --relation=admin --relationforeignkey=category_id --relationforeignkey=admin_id
|
一键生成菜单
1 2 3 4 5 6 7 8 9 10 11
| php think menu -c test
php think menu -c mydir/test
php think menu -c test -d 1
php think menu -c all-controller
|
一键压缩打包
1 2 3 4 5 6 7 8 9 10 11
| php think min -m all -r all
php think min -m backend -r all
php think min -m all -r js
php think min -m backend -r css
|
一键生成API文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| php think api --force=true
php think api -u https:
php think api -o myapi.html --force=true
php think api -e mytemplate.html --force=true
php think api -t FastAdmin -a Karson --force=true
php think api -h
|
一键管理插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| php think addon -a myaddon -c create
php think addon -a example -c refresh
php think addon -a example -c install
php think addon -a example -c uninstall
php think addon -a example -c enable
php think addon -a example -c disable
php think addon -a example -c upgrade
php think addon -a example -c package
|
一键安装FastAdmin
1 2 3 4 5 6 7 8 9 10 11 12
| php think install
php think install -a 127.0.0.1
php think install -u root -p 123456
php think install -d dbname
php think install -p ff_
php think install -f 1
|
插件
插件市场
https://www.fastadmin.net/store.html
多语言
在FastAdmin中可以在任何位置(控制器、视图、JS)使用__('语言标识');
调用语言包,如果语言标识不存在,则直接输出该语言标识.
使用方法
FastAdmin
中的__函数
和ThinkPHP
中的lang函数
在传参上有些许区别
比如:
1
| __('My name is %s', "FastAdmin");
|
将会返回:
而如果采用ThinkPHP中的lang
中的写法则是
1
| lang('My name is %s', ["FastAdmin"]);
|
可以看到ThinkPHP
中的第二个参数必须传入数组,而FastAdmin
中的__
则没有这个要求,其实在多个参数时FastAdmin
会忽略掉第三个参数$lang
如果需要在HTML视图文件中使用多语言,则需要使用{:__('Home')}
的方式调用,而在PHP和JS中均可以使用__('Home')
的方式发起调用。
加载方式
在FastAdmin
当中,框架会自动按照当前请求的控制器进行加载对应的语言包。例如当前我们是中文环境,如果我们请求的是
则FastAdmin
会自动加载
1 2
| application/admin/lang/zh-cn.php application/admin/lang/zh-cn/Dashboard.php
|
这两个语言包。
如果我们请求的路径是
则FastAdmin
会自动加载
1 2
| application/admin/lang/zh-cn.php application/admin/lang/zh-cn/general/Config.php
|
可以看到FastAdmin
会默认加载zh-cn.php
这个全局语言包。
如果我们需要跨模块引入其它模块的语言包,则可以在 控制器中使用loadlang
方法来引入,如
如果需要在JS中跨模块引入语言包,则需要修改Ajax.php
中的lang
这个方法。
数据库
这里提供的是数据库表字段规则在你创建表时使用,当按如下的规则进行字段命名、类型设置和备注时
使用php think crud -t 表名
生成CRUD时会自动生成对应的HTML元素和组件
根据字段类型
类型: 备注 – 类型说明
int
: 整形 – 自动生成type为number的文本框,步长为1
enum
: 枚举型 – 自动生成单选下拉列表框
set
: set型 – 自动生成多选下拉列表框
float
: 浮点型 – 自动生成type为number的文本框,步长根据小数点位数生成
text
: 文本型 – 自动生成textarea文本框
datetime
: 日期时间 – 自动生成日期时间的组件
date
: 日期型 – 自动生成日期型的组件
timestamp
: 时间戳 – 自动生成日期时间的组件
控制器
基类控制器
1 2 3
| application/common/controller/Api.php application/common/controller/Backend.php application/common/controller/Frontend.php
|
基础结构
在后台中我们的控制器都必须继承自\app\common\controller\Backend
这个基类,其中控制器的index/add/edit/del/multi/recyclebin/destroy/restore/import/selectpage
全都是可选的方法,基类的这些方法使用traits
进行引入,具体位置在application/admin/library/traits/Backend.php
中,CRUD
生成的标准控制器如下:
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
| <?php
namespace app\admin\controller;
class Article extends Backend {
protected $model = null; protected $noNeedLogin = []; protected $noNeedRight = ['selectpage'];
public function _initialize() { parent::_initialize(); }
}
|
基类中所定义的方法如下,以下方法都是通过application/admin/library/traits/Backend.php
引入的
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
| class Backend extends Controller {
public function index(){}
public function add($ids = ""){}
public function edit($ids = ""){}
public function del($ids = ""){}
public function multi($ids = ""){}
public function recyclebin(){}
public function destroy($ids = ""){}
public function restore($ids = ""){}
protected function import(){}
public function selectpage() { return parent::selectpage(); } }
|
属性和方法
当我们的控制器继承自app\common\controller\Backend
以后,我们就可以使用以下属性
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
|
protected $noNeedLogin = [];
protected $noNeedRight = [];
protected $layout = 'default';
protected $auth = null;
protected $searchFields = 'id';
protected $relationSearch = false;
protected $dataLimit = false;
protected $dataLimitField = 'admin_id';
protected $modelValidate = false;
protected $modelSceneValidate = false;
protected $multiFields = 'status';
|
我们可以直接在当前控制器使用$this->属性名
来调用所支持的属性,也支持直接在当前控制器定义相关属性来覆盖父类的属性,同时TP5
中\think\Controller
所支持的属性也全部支持。
基类app\common\controller\Backend
中所支持的方法如下
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
|
protected function loadlang($name) { }
protected function assignconfig($name, $value = '') { }
protected function buildparams($searchfields = null, $relationSearch = null) { }
protected function getDataLimitAdminIds() { }
protected function selectpage() { }
|
关联查询
目前FastAdmin后台index
方法支持一对一关联查询,比如我们一篇文章有归属分类,我们在列出数据时需要同时列表文章分类名称。
首先我们需要在当前控制器中添加以下属性
1
| protected $relationSearch = true;
|
然后我们修改控制器的index
方法,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public function index() { if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->with(["category"]) ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->with(["category"]) ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); $result = array("total" => $total, "rows" => $list);
return json($result); } return $this->view->fetch(); }
|
然后在控制器对应的model
(非关联model)中添加以下代码:
1 2 3 4
| public function category() { return $this->belongsTo('Category', 'category_id')->setEagerlyType(0); }
|
视图渲染
1 2 3 4 5 6 7 8
| $this->assign('site', $site);
$this->assign('config', $config);
$this->assign('auth', $this->auth);
$this->assign('admin', Session::get('admin'));
|
模块
前台
基类控制器
前台的所有功能模块的控制器都是继承于application/common/controller/Frontend.php
这个基类控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
protected $layout = '';
protected $noNeedLogin = [];
protected $noNeedRight = [];
protected $auth = null;
|
其次我们来看下基类的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
protected function loadlang($name) { }
protected function assignconfig($name, $value = '') { }
|
API
基类解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
protected $beforeActionList = [];
protected $noNeedLogin = [];
protected $noNeedRight = [];
protected $auth = null;
|
其次我们来看下基类的方法
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
|
protected function loadlang($name) { }
protected function success($msg = '', $data = null, $code = 1, $type = null, array $header = []) { }
protected function error($msg = '', $data = null, $code = 0, $type = null, array $header = []) { }
protected function result($msg, $data = null, $code = 0, $type = null, array $header = []) { }
protected function beforeAction($method, $options = []) { }
protected function validate($data, $validate, $message = [], $batch = false, $callback = null) { }
|
后台
流程介绍
首先需要知道FastAdmin的后台模块是 禁用了路由功能 的,因此后台的操作都是根据URL进行分段解析,例如我们请求的是
则调用的是默认控制器Index.php
中的默认方法index
如果我们请求的是
则调用的是Dashboard.php
中的index
方法
基类解析
后台的所有功能模块的控制器都是继承于application/common/controller/Backend.php
这个基类控制器
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
|
protected $noNeedLogin = [];
protected $noNeedRight = [];
protected $layout = 'default';
protected $auth = null;
protected $searchFields = 'id';
protected $relationSearch = false;
protected $dataLimit = false;
protected $dataLimitField = 'admin_id';
protected $dataLimitFieldAutoFill = true;
protected $modelValidate = false;
protected $modelSceneValidate = false;
protected $multiFields = 'status';
protected $importHeadType = 'comment';
|
其次我们来看下通用的方法
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
|
protected function loadlang($name) {
}
protected function assignconfig($name, $value = '') {
}
protected function buildparams($searchfields = null, $relationSearch = null) {
}
protected function getDataLimitAdminIds() {
}
protected function selectpage() { }
|
公共
Token验证
1
| Token::get('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac');
|
1
| Token::set('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac', 1, 3600);
|
1
| Token::check('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac', 1);
|
1
| Token::delete('c2259a37-5fee-4c4b-93b0-1d7313e1d1ac');
|
邮件发送
FastAdmin中的邮件发送采用phpmailer
进行邮件发送,在使用邮件发送功能前请先在后台常规管理->系统配置中配置好邮件的相关信息。
使用示例
1
| $email = new \app\common\library\Email;
|
- 其次我们可以设置邮件主题正文、接收者、标题等信息,比如
1
| $email->subject('这里是邮件标题')->to('youremail@163.com')->message('这里是邮件正文')->send();
|
短信发送
在使用短信发送之前,务必在后台安装好我们短信服务商的插件,如果我们要使用的服务商未提供有FastAdmin的插件,我们则需要自己开发一个,或注册一个sms_send
和sms_check
的事件用于我们的发送和检测操作。
使用示例
- 首先最常用的是发送短信,比如我们发送一个注册验证码
1
| Sms::send('13888888888', '1234', 'register');
|
- 发送以后我们有时需要检测验证码是否正确,则可以使用
1
| Sms::check('1388888888', '1234', 'register');
|
- 当然有些时候我们还需要发送营销短信或通知,则可以使用
1
| Sms::notice('1388888888', '消息内容', 'SMS_10001');
|
1
| Sms::flush('13888888888', 'register');
|
辅助函数
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
|
function __($name, $vars = [], $lang = '') { }
function format_bytes($size, $delimiter = '') { }
function datetime($time, $format = 'Y-m-d H:i:s') { }
function human_date($time, $local = null) { }
function cdnurl($url) { }
function is_really_writable($file) { }
function rmdirs($dirname, $withself = true) { }
function copydirs($source, $dest) { }
function mb_ucfirst($string) { }
function addtion($items, $fields) { }
function var_export_short($var, $indent = "") { }
|
前端
基础介绍
FastAdmin
的前端部分使用或涉及到主要是RequireJS
,jQuery
,AdminLTE
,Bower
,Less
,CSS
,其中
在阅读接下来的文档之前最好先简单的了解下RequireJS
和Bower
,而jQuery
是我们必须要掌握的工具库
FastAdmin中前端的最常用的第三方插件有Layer,Toastr,Layer用于弹窗
,Toastr用于提示
。
组件
FastAdmin默认集成了多个第三方组合,如表单验证
、文件上传
、下拉列表
、时间选择
、城市选择
、Selectpage
,所有的组件都必须使用Form.api.bindevent("form[role=form]")
来进行初始化,如果不进行初始化是无法对相应组件进行渲染和事件绑定。
https://doc.fastadmin.net/docs/component.html
文件上传
动态下拉列表
富文本编辑器
表单验证
城市选择
日期时间
下拉列表