跳到主要内容
FormFlow

用严格模式让表单架构成为权威

严格模式默认关闭,架构只用来指导生成,而不用来裁判回答。按表单打开它,未声明的字段就会变成拒绝;而文件字段在两种情况下都具权威。

本文由机器翻译。 阅读英文原文

A dark FormFlow plate contrasting an advisory schema with Strict mode, where the Form's field rules become authoritative.

严格模式是单个表单上的一个开关,表单创建时它是关闭的。关闭不是疏漏:几乎所有表单都从这里开始,因为一个从未收到过提交的表单,还不知道自己的形状。这个开关改变的是:架构为谁而设。

打开它之后变的是什么

严格模式关闭时,架构指导生成。它决定构建器预览显示哪些字段、生成的组件渲染什么,也是 FormFlow 在提议采纳它看到的某个字段时所依据的东西。但它不裁判回答。多出来的一个键不算违规:它会作为一条回答送达。

严格模式打开时,架构在双向都成为契约。声明过的字段没有送达,或者不满足它的规则,会被拒绝。未声明的键送达了,同样会被拒绝——同一道门,同样以字段为键的错误,而且消息说明该字段未被声明。这种对称正是重点:严格表单无法悄悄积累它从未要求过的回答。严格模式随 v1.0.0 而来,API 参考描述了它返回的拒绝。

字段规则来自一套封闭的词汇

严格模式也是字段规则被执行的唯一模式。字段规则是加在一个字段上的额外约束,超出它的类型本身已经隐含的东西,并且从 FormFlow 提供、按类型限定的一份清单里选择。你从清单里选,从不自己写规则。表单无法要求 FormFlow 运行一个 FormFlow 没有写过的检查。

字段类型

可选的规则

边界

文本

仅字母;字母与数字;字母、数字、短横线与下划线;仅简单 ASCII;小写;大写;UUID;ULID;IP 地址;MAC 地址;十六进制颜色

最小与最大长度

多行文本

仅简单 ASCII;合法 JSON

最小与最大长度

数字

整数

最小与最大值

电子邮件、电话

无

最小与最大长度

下拉选择、单选

无

无

这张表有两点。边界是整数,最多六位。而带选项清单的类型完全不接受规则:它的选项清单本身就是约束,严格模式按它裁判每一条回答。

严格模式不由你选择的地方

声明过的文件字段在每个表单上都具权威,无论严格模式是否打开。它每次都会按类型、大小和数量受检,并且硬性拒绝。这是有意的:上传是磁盘上的字节,不能交给一个默认关闭的设置来决定。另一个例外是评分表单:带答案键的表单始终处于严格模式,而且只能是托管页面,因为嵌入的标记无法公平地暴露或评分它。

用证据决定,而不是凭紧张

在打开它之前,先把候选配置拿这个表单自己的历史重放一遍。FormFlow 既保留表单接受过的提交,也保留它拒掉的已拒绝提交,所以重放能在任何人付出代价之前显示这次改动的代价。这就是严格模式可以很晚才打开、在表单已有流量之后才打开的原因。

另一个让人安心的理由:拒绝不是看不见的损失。被拒绝的提交会被保留成你可以处理的记录,不会被投递,不会成为计入提交,并且只要修好设置就能找回。严格模式提高了把架构做对的赌注;它不会让错误变成永久。

值得知道的限制

  • 默认关闭。如果你不记得打开过它,它就是关闭的。

  • 它只裁判回答。允许来源名单和请求结构在每个表单上都会被裁判,无论是否严格。

  • 声明过的文件字段两种情况下都受检,所以一次不带上载就通过的严格模式测试,对文件什么也证明不了。

  • 字段规则只在严格模式下生效。把一个表单移出严格模式,就会悄悄停止执行你为它选的每一条规则。

  • 评分表单不能离开严格模式,也不能嵌入,所以要在它收到第一条提交之前把架构规划好。