首页 / 开发文档 / 字段引擎

字段引擎

字段 schema 的格式、校验规则,以及怎么增加一种新的字段类型。

schema 格式

{
  "fields": [
    {"key":"price",  "label":"价格", "type":"number", "required":true, "filter":true},
    {"key":"brand",  "label":"品牌", "type":"select", "options":["甲","乙"]},
    {"key":"gallery","label":"图集", "type":"images"}
  ]
}

字段属性

属性说明
key字段标识。小写字母开头,30 字符内,不能与内置字段重名
label显示名称,最长 40 字
type字段类型,必须在已注册的类型表里
required是否必填
options选项值,最多 50 个
default新建内容时的默认值
hint输入框下方的填写提示
filter是否参与前台查询。只有部分类型支持

内置字段名是保留的

以下名字已被内容主表占用,不能用作自定义字段标识:

id  cid  model  title  alias  summary  content  thumb  ext_data
hits  top  sort  status  publish_time  author_id
created_at  updated_at  reject_reason  url

一套 schema,两处使用

内容模型和自定义表单共用同一份 schema 格式、同一个渲染器、同一个校验器。 新增一种字段类型时,两处会同时获得这种能力,不存在两套并行逻辑。

校验发生在哪里

  1. 后台表单:前端做基础校验,提升体验
  2. 服务端:重新按 schema 逐字段校验,不信任任何前端提交
  3. 入库前:下拉与单选的值如果不在选项列表里,直接丢弃,避免脏数据

第三点值得强调:即使有人手工构造请求塞进一个不存在的选项值,也不会被写进数据库。

增加一种字段类型

在字段类型注册表里加一项,然后补上它的渲染分支与校验分支即可, 内核其它地方不需要改动 —— 模板层不必理解具体类型,它拿到的是一段已经渲染好的控件 HTML。

没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。