JSON格式字段处理
dcat-admin
的表单提供了下面几个组件来处理JSON
格式的字段,方便用来处理JOSN
格式的对象、一维数组、二维数组等对象。
键值对象 (keyValue)
如果你的字段存储的是不固定键
的{"field":"value"}
格式,可以用keyValue
组件:
<?php
$form->keyValue('column_name');
// 设置校验规则
$form->keyValue('column_name')->rules('required|min:5');
自定义键名以及键值标题翻译
<?php
$form->keyValue(...)->setKeyLabel('键名')->setValueLabel('键值');
固定键值对象 (embeds)
用于处理mysql
的JSON
类型字段数据或者mongodb
的object
类型数据,也可以将多个field
的数据值以JSON
字符串的形式存储在mysql
的字符串类型字段中
适用于有固定键值的JSON
类型字段
<?php
$form->embeds('column_name', function ($form) {
$form->text('key1')->required();
$form->email('key2')->required();
$form->datetime('key3');
$form->dateRange('key4', 'key5', '范围')->rules('required');
})->saving(function ($v) {
// 转化为json格式存储
return json_encode($v);
});
// 自定义标题
$form->embeds('column_name', '字段标题', function ($form) {
...
});
回调函数里面构建表单元素的方法调用和外面是一样的。
一维数组 (list)
如果你的字段是用来存储["foo", "Bar"]
格式的一维数组, 可以使用list
组件:
<?php
$form->list('column_name');
// 设置校验规则
$form->list('column_name')->rules('required|min:5');
// 设置最大和最小元素个数
$form->list('column_name')->max(10)->min(5);
二维数组 (table)
如果某一个字段存储的是json
格式的二维数组,可以使用table
表单组件来实现快速的编辑:
<?php
$form->table('column_name', function ($table) {
$table->text('key');
$table->text('value');
$table->text('desc');
})->saving(function ($v) {
return json_encode($v);
});
这个组件类似于hasMany
组件,不过是用来处理单个字段的情况,适用于简单的二维数据。
二维数组 (array)
如果某一个字段存储的是json
格式的二维数组,并且字段比较多,可以使用array
表单组件来实现快速的编辑:
<?php
$form->array('column_name', function ($table) {
$table->text('key');
$table->text('value');
$table->textarea('desc');
})->saveAsJson();