FastAdmin CRUD 代码生成器使用指南:一键生成增删改查

FastAdmin CRUD 代码生成器使用指南:一键生成增删改查

admin
2026-07-24 / 0 评论 / 0 阅读

前言

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.js

1.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
-uURL 绑定的模型-u model_name
--local不调用远程 API--local=1

六、最佳实践

  1. 先设计表结构再生成:字段注释直接决定生成质量,务必写清楚
  2. 生成后不要改生成的文件名:保持命名一致性,便于重新生成
  3. 自定义逻辑在生成文件基础上修改:先 php think crud 生成骨架,再手动添加业务逻辑
  4. 修改表结构后重新生成:用 -f 1 覆盖,但注意备份自定义代码
  5. 善用关联搜索$this->relationSearch = true 可以快速实现跨表搜索

总结

FastAdmin CRUD 生成器的核心思想是"约定优于配置"——通过数据库字段注释驱动代码生成,大幅减少重复劳动。掌握字段注释规范和关联模型用法后,90% 的后台增删改查功能可以在几分钟内完成。

0

评论 (0)

取消
0:00