数据表格

快速入门

ModStart\Grid\Grid 类用于生成基于数据模型的表格,先来个例子,数据库中有 blog

  1. CREATE TABLE `blog` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `title` varchar(200) DEFAULT NULL,
  4. `cover` varchar(200) DEFAULT NULL,
  5. `summary` varchar(200) DEFAULT NULL,
  6. `content` text,
  7. `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  8. `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

使用下面的代码可以生成 blog 的数据表格。

  1. <?php
  2. namespace App\Admin\Controller;
  3. use Illuminate\Routing\Controller;
  4. use ModStart\Admin\Concern\HasAdminDetail;
  5. use ModStart\Admin\Concern\HasAdminForm;
  6. use ModStart\Admin\Concern\HasAdminGrid;
  7. use ModStart\Detail\Detail;
  8. use ModStart\Form\Form;
  9. use ModStart\Grid\Grid;
  10. use ModStart\Grid\GridFilter;
  11. class BlogController extends Controller
  12. {
  13. // 设置当前 Controller 包含 Grid、Form、Detail 三种特性
  14. use HasAdminGrid;
  15. use HasAdminForm;
  16. use HasAdminDetail;
  17. // 定义当前页面主标题
  18. public $pageTitle = '博客';
  19. public function grid()
  20. {
  21. $grid = Grid::make('blog');
  22. // 定义显示ID列
  23. $grid->id('id', 'ID');
  24. // 定义标题字段,格式为单行文本
  25. $grid->text('title', '标题');
  26. // 定义封面字段,格式为单张图片
  27. $grid->image('cover', '封面');
  28. // 定义摘要字段,格式为多行文本
  29. $grid->textarea('summary', '摘要');
  30. // 定义内容字段,格式为富文本
  31. $grid->richHtml('content', '内容');
  32. // 定义创建时间字段,格式为简单显示
  33. $grid->display('created_at', '创建时间');
  34. // 定义搜索过滤字段
  35. $grid->gridFilter(function (GridFilter $filter) {
  36. // 定义ID可搜索
  37. $filter->eq('id', 'ID');
  38. // 定义标题可模糊查找
  39. $filter->like('title', '标题');
  40. });
  41. // 定义整体增删改查标题为「博客」
  42. $grid->title('博客');
  43. return $grid;
  44. }
  45. public function form()
  46. {
  47. return Form::make('blog', function (Form $form) {
  48. // 定义标题字段,格式为单行文本
  49. $form->text('title', '标题');
  50. // 定义封面字段,格式为单张图片
  51. $form->image('cover', '封面');
  52. // 定义摘要字段,格式为多行文本
  53. $form->textarea('summary', '摘要');
  54. // 定义内容字段,格式为富文本
  55. $form->richHtml('content', '内容');
  56. });
  57. }
  58. public function detail()
  59. {
  60. return Detail::make('blog', function (Detail $detail) {
  61. // 定义显示ID列
  62. $detail->id('id', 'ID');
  63. // 定义标题字段,格式为单行文本
  64. $detail->text('title', '标题');
  65. // 定义封面字段,格式为单张图片
  66. $detail->image('cover', '封面');
  67. // 定义摘要字段,格式为多行文本
  68. $detail->textarea('summary', '摘要');
  69. // 定义内容字段,格式为富文本
  70. $detail->richHtml('content', '内容');
  71. // 定义创建时间字段,格式为简单显示
  72. $detail->display('created_at', '创建时间');
  73. // 定义更新时间字段,格式为简单显示
  74. $detail->display('updated_at', '更新时间');
  75. });
  76. }
  77. }

定义Routes

  1. <?php
  2. Route::group(
  3. [
  4. 'prefix' => env('ADMIN_PATH', '/admin/'),
  5. 'middleware' => ['admin.bootstrap', 'admin.auth'],
  6. 'namespace' => '\App\Admin\Controller',
  7. ], function () {
  8. Route::match(['get', 'post'], 'blog', 'BlogController@index');
  9. Route::match(['get', 'post'], 'blog/add', 'BlogController@add');
  10. Route::match(['get', 'post'], 'blog/edit', 'BlogController@edit');
  11. Route::match(['get', 'post'], 'blog/delete', 'BlogController@delete');
  12. Route::match(['get', 'post'], 'blog/show', 'BlogController@show');
  13. });

数据表格仓库

使用MySQL表名

使用数据表名称创建数据表格

  1. $grid = Grid::make('blog');

使用数据模型类

使用数据模型类来创建数据表格

  1. $grid = Grid::make(Blog::class);

其中 Blog 定义如下

  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. class Blog extends Model
  5. {
  6. protected $table = 'blog';
  7. }

列的配置和使用

一个基础列

  1. $grid->display('field','名称');

设定宽度

  1. $grid->display('field','名称')->width(100);

自定义渲染

  1. $grid->display('field','自定义列')->hookRendering(function (AbstractField $field, $item, $index) {
  2. return '<span>自定义内容:'.$item->field.'</span>';
  3. });

行的配置和使用

数据表格行默认有 3 个操作:编辑删除查看,可以通过如下方式关闭。

  1. // 关闭编辑
  2. $grid->canEdit(false);
  3. // 关闭删除
  4. $grid->canDelete(false);
  5. // 关闭查看
  6. $grid->canShow(false);
  7. // 一键关闭编辑、删除、查看
  8. $grid->disableCUD();

自定义渲染行操作

  1. $grid->hookItemOperateRendering(function (ItemOperate $itemOperate) {
  2. // 当前行数据
  3. $item = $itemOperate->item();
  4. // 在默认操作之前增加操作
  5. $itemOperate->prepend('<a href="#">其他操作</a>');
  6. // 在默认操作之后增加操作
  7. $itemOperate->push('<a href="#">其他操作</a>');
  8. });

不显示操作列

  1. $grid->disableItemOperate();

筛选条件的配置

定义表格筛选条件

  1. $grid->gridFilter(function (GridFilter $filter) {
  2. $filter->eq('id', 'ID');
  3. $filter->like('title', '标题');
  4. })

工具栏配置使用

在右上角工具栏增加操作

  1. $grid->gridOperateAppend('<a href="#" class="btn btn-primary">操作</a>');

数据排序使用

默认按照ID倒序排序,可自定义列表排序

  1. $grid->defaultOrder(['字段', 'asc或desc']);

字段使用介绍

为 Grid 定义一个字段

  1. $field = $grid->text('field', '名称');

字段可排序

定义后在 Grid 顶端会出现上下箭头的可点击实现 正序、倒序、默认 三种排序方式

  1. $field->sortable(true);

所有字段支持

显示 display

  1. $grid->display('field','名称');

单行文本 text

  1. $grid->text('field', '名称');

多选 checkbox

  1. $grid->checkbox('field', '名称');

标签 tags

  1. $grid->tags('field', '名称');

代码 code

  1. $grid->code('field', '名称');

树状组件 tree

  1. $grid->tree('field', '名称');

类型 type

  1. $grid->type('field', '类型');

密码 password

  1. $grid->password('field', '类型');

单张图片 image

  1. $grid->image('field', '类型');

多张图片 images

  1. $grid->type('field', '类型');

多张图片(临时路径) imagesTemp

  1. $grid->type('field', '类型');
  1. $grid->link('field', '类型');

开关 switch

  1. $grid->switch('field', '类型');

多行文本 textarea

  1. $grid->textarea('field', '类型');

颜色 color

  1. $grid->color('field', '类型');

日期 date

  1. $grid->date('field', '类型');

日期时间 datetime

  1. $grid->datetime('field', '类型');

时间 time

  1. $grid->time('field', '类型');

单选 radio

  1. $grid->radio('field', '类型');

下拉 select

  1. $grid->select('field', '类型');

富文本 richHtml

  1. $grid->richHtml('field', '类型');

Markdown markdown

  1. $grid->markdown('field', '类型');

键值对列表 keyValueList

  1. $grid->keyValueList('field', '类型');

多值 values

  1. $grid->values('field', '类型');

HTML html

  1. $grid->html('field', '类型');

数字 number

  1. $grid->number('field', '类型');

百分比 percent

  1. $grid->percent('field', '类型');

小数 decimal

  1. $grid->decimal('field', '类型');

货币 currency

  1. $grid->currency('field', '类型');

ID id

  1. $grid->id('field', '类型');

验证码 captcha

  1. $grid->captcha('field', '类型');

临时文件 fileTemp

  1. $grid->fileTemp('field', '类型');

文件 file

  1. $grid->file('field', '类型');

视频 video

  1. $grid->video('field', '类型');

音频 audio

  1. $grid->audio('field', '类型');

中国地区 areaChina

  1. $grid->areaChina('field', '类型');

隐藏域 hidden

  1. $grid->hidden('field', '类型');

图标 icon

  1. $grid->icon('field', '类型');

更多内置组件请参照 ModStart\Support\Manager\FieldManager 中的定义