raffaelj /cockpit-formvalidation
Cockpit CMS v1 的表单验证器和表单构建器
Requires
- composer/installers: ^1.9
Suggests
- ext-intl: For validation of punycode domains
README
此插件与 Cockpit CMS v2 不兼容。
另请参阅 Cockpit CMS v1 文档、Cockpit CMS v1 存储库 以及 Cockpit CMS v2 文档、Cockpit CMS v2 存储库。
Cockpit CMS v1 的表单验证器和表单构建器。我主要将它与 CpMultiplane 结合使用,但它应该兼容纯 rest api 使用。
正在进行中!欢迎您通过代码、错误报告或功能请求进行贡献。
安装
将此存储库复制到 /addons
并命名为 FormValidation
,或使用命令行界面。
通过 git
cd path/to/cockpit
git clone https://github.com/raffaelj/cockpit_FormValidation.git addons/FormValidation
通过 cp 命令行界面
cd path/to/cockpit
./cp install/addon --name FormValidation --url https://github.com/raffaelj/cockpit_FormValidation/archive/master.zip
通过 composer
请确保在项目的 composer.json
文件中定义了 cockpit 插件的路径。
{ "name": "my/cockpit-project", "extra": { "installer-paths": { "addons/{$name}": ["type:cockpit-module"] } } }
cd path/to/cockpit-root composer create-project --ignore-platform-reqs aheinze/cockpit . composer config extra.installer-paths.addons/{\$name} "type:cockpit-module" composer require --ignore-platform-reqs raffaelj/cockpit-formvalidation
要求
- Cockpit 版本 >= 0.12.2
- 建议使用 PECL intl 扩展进行 punycode url 和邮件地址的转换
功能
表单构建器
字段类型
- 布尔型(复选框)
- 文本
- 多行文本
- 日期
- 下拉列表
- 多选下拉列表
- 内容块(以
field.content
存储为富文本) - 诱饵(具有默认的隐藏输入字段属性)
- 文件(默认情况下不工作 - 在 CpMultiplane 源代码中有一个高级使用示例,直到我更新此处的文档为止)
它适用于字符串,而且我(目前)不知道如果应该验证数组会发生什么。
在前端中,可以重用一些表单选项,如 "info"、"label"、"group"、"lst"、"width"。
...
表单验证器
- 检查必填字段
- 检查内容类型
- 如果验证失败,则发送响应
想法是在每个字段上添加多个检查来欺骗垃圾邮件机器人,而不使用验证码。
一些模板化
- 自定义邮件主题
- 回复字段
请参阅下面的截图
如何使用
创建一个字段并单击 "验证" 选项卡。单击 "验证表单数据" 以激活验证器。
当验证器处于活动状态时,它会检查是否包含必填字段。如果您想允许发送在表单构建器中未出现的字段,您必须单击 "允许额外字段"。
要激活更多验证,请为每个字段单击 "验证" 并添加一些 json。
邮件字段
创建一个文本字段。
{ "type": { "mail": true, "url": false } }
诱饵
创建一个布尔字段并将其命名为 "confirm"。垃圾邮件机器人会喜欢它 :-D
{ "honeypot": { "fieldname": "confirm", "expected_value": "0", "response": "Hello spambot. A human wouldn't fill this field." } }
如果 "response": "404"
,则发送者会收到一个 404 路径未找到
而不是 json 响应。
...
默认值
- 如果表单验证处于活动状态
- 键名必须是字母数字(a-zA-Z0-9)或 '-' 或 '_'
- 检查是否存在必填字段
- 不允许发送具有未知字段名的数据
- 如果字段验证处于活动状态
- 没有默认值,只有指定的验证
注意
- 将验证设置为
type:{"phone":false}
可能会导致错误阳性。正则表达式旨在允许输入类似 "0123 45678" 或 "+49 123-456-78",但 "123" 也会返回 true。
i18n
使用 Babel 插件
待办
- 允许使用特殊字符的邮件地址(Punycode) - 它们是有效的,但
filter_var($to, FILTER_VALIDATE_EMAIL)
返回 false- --> 再次覆盖原始提交函数,或者
- --> 修改 cockpit 核心的邮件验证 --> 现在已在核心中
- 错误响应的国际化
- 友好的错误响应 --> 使用国际化
- 添加一个视图,通过 PHP 前端包含
匹配
- 必需(!empty)
- 蜜罐(人类不会填写此字段)
- 类型(邮件、电话、URL)
- !类型(反向类型)
- equals (= 字符串)(用于简单的验证码或类似“你真的确定吗?请输入'是'”)
- 包含
- 代码
- URL(s)
- 字符串
类型
- 邮件
- 电话
- URL
- 数字
- 布尔值
- ASCII
- 日期 --> 必须是国际化特定的
- ...
表单邮件模板示例
在 config/forms/emails/formname.php
中创建一个自定义邮件模板,以使用 email_text_before
和 email_text_after
设置。
屏幕截图
致谢和第三方库
图标来自 Cockpit CMS v2,(c) Artur Heinze,https://agentejo.com,MIT 许可证