jzechy / nette-antispam
Nette AntiSpam 表单控件。
2.0.5.1
2018-10-06 19:33 UTC
Requires
- php: ^5.6 || ^7.0
- nette/di: ^2.4.0
- nette/forms: ^2.4.0
- nette/http: ^2.4.0
- nette/utils: ^2.4.0
README
Nette-AntiSpam 作为表单组件,通过四种方法保护表单免受随机垃圾邮件的影响。
隐藏字段
在表单中生成额外的字段,这些字段被 JavaScript 隐藏。如果任何字段被填写,发送者将被识别为垃圾邮件机器人。
可以通过在隐藏后使用自定义 CSS 类来替换被 JavaScript 隐藏,以供没有 JavaScript 的用户使用。
表单锁定时间
由于垃圾邮件机器人通常会立即发送表单,可以设置在多长时间内表单被锁定。
验证问题
随机生成的简单数学问题,其中数字被随机转换为字符串。这个问题再次被隐藏并使用 JavaScript 填写。如果用户禁用了 JavaScript,则会被要求填写该字段。
在这种情况下,可以设置标签和输入的自定义绘制。
帖子间的延迟
此延迟定义了用户可以再次发送帖子需要多长时间。
Composer
composer require jzechy/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 函数接受一个参数作为第一个参数,该参数是元素的名称,这是必填的。
可以添加第二个参数作为表单锁定,以及作为第三个参数用户可以再次发送表单的时间。
表单验证
可以按照元素返回的值来验证表单 - 如果发送者通过了 antispam,则返回 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; }