JSON格式字段处理

dcat-admin的表单提供了下面几个组件来处理JSON格式的字段,方便用来处理JOSN格式的对象、一维数组、二维数组等对象。

键值对象 (keyValue)

JSON格式字段处理 - 图1

如果你的字段存储的是不固定{"field":"value"}格式,可以用keyValue组件:

  1. $form->keyValue('column_name');
  2. // 设置校验规则
  3. $form->keyValue('column_name')->rules('required|min:5');

固定键值对象 (embeds)

JSON格式字段处理 - 图2

用于处理mysqlJSON类型字段数据或者mongodbobject类型数据,也可以将多个field的数据值以JSON字符串的形式存储在mysql的字符串类型字段中

适用于有固定键值的JSON类型字段

  1. $form->embeds('column_name', function ($form) {
  2. $form->text('key1')->required();
  3. $form->email('key2')->required();
  4. $form->datetime('key3');
  5. $form->dateRange('key4', 'key5', '范围')->rules('required');
  6. })->saving(funtion ($v) {
  7. // 转化为json格式存储
  8. return json_encode($v);
  9. });
  10. // 自定义标题
  11. $form->embeds('column_name', '字段标题', function ($form) {
  12. ...
  13. });

回调函数里面构建表单元素的方法调用和外面是一样的。

一维数组 (list)

JSON格式字段处理 - 图3

如果你的字段是用来存储["foo", "Bar"]格式的一维数组, 可以使用list组件:

  1. $form->list('column_name');
  2. // 设置校验规则
  3. $form->list('column_name')->rules('required|min:5');
  4. // 设置最大和最小元素个数
  5. $form->list('column_name')->max(10)->min(5);

二维数组 (table)

JSON格式字段处理 - 图4

如果某一个字段存储的是json格式的二维数组,可以使用table表单组件来实现快速的编辑:

  1. $form->table('column_name', function ($table) {
  2. $table->text('key');
  3. $table->text('value');
  4. $table->textarea('desc');
  5. })->saving(function ($v) {
  6. return json_encode($v);
  7. });

这个组件类似于hasMany组件,不过是用来处理单个字段的情况,适用于简单的二维数据。

二维数组 (array)

{tip} Since v1.7.0

JSON格式字段处理 - 图5

如果某一个字段存储的是json格式的二维数组,并且字段比较多,可以使用array表单组件来实现快速的编辑:

  1. $form->array('column_name', function ($table) {
  2. $table->text('key');
  3. $table->text('value');
  4. $table->textarea('desc');
  5. })->saveAsJson();