urbitech/nette-antispam

Nette AntiSpam 表单控件。

3.0.4 2021-06-10 11:56 UTC

This package is auto-updated.

Last update: 2024-09-10 19:33:55 UTC


README

Latest stable license Downloads Total Open Issues

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;
}