urbitech / nette-antispam
Nette AntiSpam 表单控件。
3.0.4
2021-06-10 11:56 UTC
Requires
- php: ^7.0
- nette/di: ^3.0
- nette/forms: ^3.0
- nette/http: ^3.0
- nette/utils: ^3.0
README
Nette-AntiSpam 作为表单组件,通过四种方法保护表单免受随机垃圾邮件的侵害。
隐藏字段
在表单中生成额外的字段,这些字段通过 JavaScript 对用户隐藏。如果某个字段被填写,则发送者将被识别为垃圾邮件机器人。
可以通过在隐藏后替换为自定义 CSS 类来替换被 JavaScript 隐藏。
表单时间锁
由于垃圾邮件机器人通常几乎立即发送表单,因此可以设置时间,在此时间内表单被锁定。
验证问题
随机生成的简单计算题,数字被随机转换为字符串。这个问题同样被用户隐藏并由 JavaScript 填写。如果用户禁用了 JavaScript,则将要求用户填写该字段。
在这种情况下,可以为标签和输入设置自定义的渲染。
帖子之间的延迟
此延迟指定用户多久可以再次发送帖子。
Composer
composer require urbitech/nette-antispam
安装
只需在您的 config.neon 中 extensions 部分添加
antispam: Zet\AntiSpam\AntiSpamExtension
配置
可以通过以下设置配置组件
- lockTime 表单锁定时间,在此期间不能发送。设置预期延迟的秒数。
- resendTime 用户可以再次发送表单的时间。设置预期延迟的秒数,可以通过设置为 0 来禁用。
- numbers 用于随机转换的数字字段。数字从 0 开始排序。
- question 验证问题的内容。
- translate 启用验证问题的本地化。True/false。
使用
注册的表单扩展可以使用以下方式
protected function createComponentForm() { $form = new \Nette\Application\UI\Form(); // Vlastní prvky formuláře ... $form->addAntiSpam("spamControl", 5, 60); }
addAntiSpam 函数接受第一个参数为元素名称,这是一个必填参数。
然后可以添加第二个参数为表单锁定,以及第三个参数为用户可以再次发送表单的时间。
验证表单
可以根据元素返回的值验证表单 - 如果发送者通过了抗垃圾邮件验证,则返回 true,否则返回 false
$values = $form->getValues(); if($values->spamControl) { // Všechny podmínky pro odeslání formuláře byli splněny. }
配置
设置器
$antiSpam->setLockTime(); // Nastaví, kolik vteřin musí uplynout před odesláním formuláře. $antiSpam->setResendTime(); // Nastaví, kolik vteřin musí uplynout, než je formulář znova odeslán. $antiSpam->setNumbers(); // Pole čísel vyjádřených slovy pro náhodný převod na řetězec. $antispam->setQuestion(); // Znění kontrolní otázky.
获取器
$antispam->getError(); // Kod chyby. $antispam->getHiddenFields(); // Vrátí generátor skrytých polí. Užitečné pro přepnutí schování z JS na CSS. $antispam->getQuestionGenerator(); // Vrátí generátor kontrolní otázky s prototypy Labelu a inputu.
如果所有发送表单的条件都满足,则 getError() 函数将返回 0。否则,将返回错误编号,可以与 Zet\AntiSpam\ErrorType 类中的常量进行测试。
ErrorType 常量
class ErrorType { use StaticClass; const NO_ERROR = 0; const LOCK_TIME = 1; const RESEND_TIME = 2; const HIDDEN_FIELDS = 3; const QUESTION = 4; }