前言
FastAdmin 的 CRUD 代码生成器是框架最核心的功能之一——只需要一条命令,就能根据数据库表结构自动生成控制器、模型、视图、JS、验证器和菜单,实现完整的增删改查。本文将全面讲解 CRUD 生成器的使用方法和进阶技巧。
一、基础用法
1.1 准备数据表
先创建一张示例表:
CREATE TABLE `fa_article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`title` varchar(100) NOT NULL DEFAULT '' COMMENT '标题',
`content` text COMMENT '内容',
`category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID',
`author` varchar(50) NOT NULL DEFAULT '' COMMENT '作者',
`status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态',
`views` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '浏览量',
`createtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',
`updatetime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';1.2 一键生成 CRUD
php think crud -t fa_article -c content/article参数说明:
| 参数 | 说明 |
|---|---|
-t | 数据表名(带前缀) |
-c | 控制器路径,格式为 模块/控制器 |
执行后自动生成以下文件:
application/admin/controller/content/Article.php
application/admin/model/Article.php
application/admin/validate/Article.php
application/admin/view/content/article/index.html
application/admin/view/content/article/add.html
application/admin/view/content/article/edit.html
application/admin/view/content/article/recyclebin.html
public/assets/js/backend/content/article.js1.3 生成菜单
php think menu -c content/article执行后在后台菜单管理中会自动出现"文章管理"菜单。
二、字段注释驱动生成
FastAdmin 的 CRUD 生成器会读取数据库字段注释来决定前端控件的渲染方式。这是最强大的特性之一:
2.1 字段注释格式
`status` enum('normal','hidden') NOT NULL DEFAULT 'normal' COMMENT '状态:normal=正常,hidden=隐藏'生成器会解析注释中的 normal=正常,hidden=隐藏,自动渲染为下拉选择框:
<select class="form-control selectpicker" name="status">
<option value="normal">正常</option>
<option value="hidden">隐藏</option>
</select>2.2 常用字段类型映射
| 数据库字段类型 | 自动生成的控件 |
|---|---|
varchar | 文本输入框 |
text | 富文本编辑器 |
int(含 time 关键字) | 日期时间选择器 |
enum | 下拉选择框 |
decimal | 数字输入框 |
date | 日期选择器 |
2.3 特殊字段名约定
FastAdmin 对特定字段名有特殊处理:
| 字段名 | 自动行为 |
|---|---|
createtime / updatetime | 自动维护创建/更新时间 |
status | 列表页显示状态切换按钮 |
weigh | 自动添加拖拽排序功能 |
image / images | 自动生成图片上传组件 |
file / files | 自动生成文件上传组件 |
ids | 生成多选关联组件 |
三、进阶用法
3.1 关联模型生成
如果表中有外键字段,可以通过命名约定自动生成关联:
-- 主表
CREATE TABLE `fa_category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 从表
CREATE TABLE `fa_article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL DEFAULT '',
`category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '分类ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;在模型中定义关联:
// application/admin/model/Article.php
namespace app\admin\model;
use think\Model;
class Article extends Model
{
// 关联分类
public function category()
{
return $this->belongsTo('Category', 'category_id', 'id');
}
}在控制器中启用关联查询:
// application/admin/controller/content/Article.php
public function index()
{
$this->relationSearch = true;
$this->searchFields = 'id,title,category.name';
// 设置关联
$this->with = ['category'];
return parent::index();
}3.2 强制覆盖生成
php think crud -t fa_article -c content/article -f 1-f 1 参数会覆盖已存在的文件,适合修改表结构后重新生成。
3.3 删除生成的文件
php think crud -t fa_article -c content/article -d 1-d 1 参数会删除该表对应的所有 CRUD 文件。
四、自定义模板
4.1 修改生成模板
CRUD 模板位于 extend/fast/crud/tpl/ 目录:
extend/fast/crud/tpl/
├── controller.tpl # 控制器模板
├── model.tpl # 模型模板
├── validate.tpl # 验证器模板
├── index.tpl # 列表视图模板
├── add.tpl # 添加视图模板
├── edit.tpl # 编辑视图模板
└── javascript.tpl # JS 模板4.2 自定义列表字段显示
在 JS 文件中控制列表列的显示:
// public/assets/js/backend/content/article.js
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = {
index: function () {
Table.init({
extend: {
index_url: 'content/article/index',
add_url: 'content/article/add',
edit_url: 'content/article/edit',
del_url: 'content/article/del',
table: 'article',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.extend({}, Table.config.url),
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{field: 'title', title: __('Title')},
{field: 'category.name', title: __('Category')},
{field: 'author', title: __('Author')},
{field: 'status', title: __('Status'),
searchList: {"normal": __('Normal'), "hidden": __('Hidden')},
formatter: Table.api.formatter.status},
{field: 'views', title: __('Views')},
{field: 'createtime', title: __('Createtime'),
formatter: Table.api.formatter.datetime},
{field: 'operate', title: __('Operate'),
table: table, events: Table.api.events.operate,
formatter: Table.api.formatter.operate}
]
]
});
Table.api.bindevent(table);
},
add: function () {
Controller.api.bindevent();
},
edit: function () {
Controller.api.bindevent();
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
}
}
};
return Controller;
});五、CRUD 常用参数汇总
| 参数 | 说明 | 示例 |
|---|---|---|
-t | 数据表名(带前缀) | -t fa_user |
-c | 控制器路径 | -c user/index |
-f | 强制覆盖 | -f 1 |
-d | 删除生成文件 | -d 1 |
-o | 输出文件路径 | -o /tmp/crud |
-u | URL 绑定的模型 | -u model_name |
--local | 不调用远程 API | --local=1 |
六、最佳实践
- 先设计表结构再生成:字段注释直接决定生成质量,务必写清楚
- 生成后不要改生成的文件名:保持命名一致性,便于重新生成
- 自定义逻辑在生成文件基础上修改:先
php think crud生成骨架,再手动添加业务逻辑 - 修改表结构后重新生成:用
-f 1覆盖,但注意备份自定义代码 - 善用关联搜索:
$this->relationSearch = true可以快速实现跨表搜索
总结
FastAdmin CRUD 生成器的核心思想是"约定优于配置"——通过数据库字段注释驱动代码生成,大幅减少重复劳动。掌握字段注释规范和关联模型用法后,90% 的后台增删改查功能可以在几分钟内完成。
评论 (0)