silverstripe/spamprotection

为 SilverStripe 提供的垃圾邮件防护模块。

安装次数: 788 143

依赖: 44

建议者: 4

安全性: 0

星标: 43

关注者: 16

分支: 37

开放问题: 4

类型:silverstripe-vendormodule

4.2.1 2024-06-17 00:44 UTC

README

CI Silverstripe supported module

安装

composer require silverstripe/spamprotection

维护者联系方式

  • Saophalkun Ponlu <phalkunz (at) silverstripe (dot) com>

  • Will Rossiter <will (at) fullscreen (dot) io>

文档

本模块提供了一个通用的、一致的 API,用于将垃圾邮件防护添加到您的 Silverstripe 表单中。它本身不提供任何垃圾邮件防护功能。为此,您还必须下载一个垃圾邮件防护实现。目前可用的选项包括

作为开发者,您也可以通过创建一个实现 \SilverStripe\SpamProtection\SpamProtector 接口的类来提供自己的保护器。更多内容请见下文。

配置

安装此模块和您选择的保护器(例如 mollom)后,您需要通过 dev/build 重建数据库,并通过 SilverStripe 的配置系统设置默认保护器。这将更新任何带有垃圾邮件保护钩子的表单实例。

mysite/_config/spamprotection.yml

---
name: mycustomspamprotection
---
SilverStripe\SpamProtection\Extension\FormSpamProtectionExtension:
  default_spam_protector: MollomSpamProtector

要为表单实例添加垃圾邮件防护,请调用 enableSpamProtection

// your existing form code
$form = new Form(/* .. */);
$form->enableSpamProtection();

实际的垃圾邮件验证逻辑由每个 SpamProtector 实现控制,因为它们各自需要不同的客户端或服务器端实现。

选项

enableSpamProtection 接受一组可选的配置值。

$form->enableSpamProtection(array(
    'protector' => MathSpamProtector::class,
    'name' => 'Captcha'
));

可配置的选项包括

  • protector:实现 \SilverStripe\SpamProtection\SpamProtector 的类名字符串或类实例。默认值为 SilverStripe\SpamProtection\Extension\FormSpamProtectionExtension.default_spam_protector

  • name:Captcha 的表单字段名称参数。默认为 Captcha

  • title:Captcha 表单字段的标题。默认为 ''

  • insertBefore:在之前插入垃圾邮件保护字段现有字段的名称

  • mapping:将表单字段映射到标准化的字段名称列表的数组。传递给垃圾邮件保护器的标准化字段列表包括

title
body
contextUrl
contextTitle
authorName
authorMail
authorUrl
authorIp
authorId

定义自己的 SpamProtector

任何实现 \SilverStripe\SpamProtection\SpamProtectorgetFormField() 方法的类都可以设置为垃圾邮件保护器。该 getFormField() 方法返回要插入到 Form 中的 FormField。返回的 FormField 应负责验证过程。

<?php

use CaptchaField;
use SilverStripe\SpamProtection\SpamProtector;

class CustomSpamProtector implements SpamProtector
{
    public function getFormField($name = null, $title = null, $value = null)
    {
        // CaptchaField is an imagined class which has some functionality.
        // See silverstripe-mollom module for an example.
        return new CaptchaField($name, $title, $value);
	}
}

与用户表单一起使用垃圾邮件防护

本模块提供了一个 EditableSpamProtectionField 包装器,您可以将其添加到您的 UserForm 实例中。安装此模块并运行 /dev/build 重建数据库后,您的表单构建器界面将有一个 垃圾邮件防护字段 的选项。所使用的垃圾邮件防护类型将基于您当前选择的 SpamProtector 实例。

带有垃圾邮件防护支持的代码发布

垃圾邮件防护很有用,但在某些情况下,我们可能不希望要求开发人员使用垃圾邮件防护。在这种情况下,模块可以提供以下模式

use SilverStripe\Forms\Form;
use SilverStripe\SpamProtection\Extension\FormSpamProtectionExtension;

$form = new Form(/* .. */);

if ($form->hasExtension(FormSpamProtectionExtension::class)) {
    $form->enableSpamProtection();
}