tomfun/recaptcha-bundle

此包已被废弃且不再维护。未建议替代包。

此插件提供简单的reCAPTCHA表单字段集成,由excelwebzone分支而来

安装: 35

依赖者: 0

建议者: 0

安全性: 0

星星: 1

关注者: 2

分支: 153

类型:symfony-bundle

v1.0.0 2013-09-02 15:48 UTC

This package is not auto-updated.

Last update: 2023-10-10 01:09:42 UTC


README

此插件为Symfony提供简单的reCAPTCHA表单字段

安装

步骤1:使用Composer(推荐)

使用Composer安装EWZRecaptchaBundle,只需将以下内容添加到您的composer.json文件中

// composer.json
{
    // ...
    "require": {
        // ...
        "excelwebzone/recaptcha-bundle": "dev-master"
    }
}

注意:请将上面片段中的dev-master替换为最新的稳定分支,例如2.0.*

然后,您可以通过从composer.json文件所在的目录运行Composer的update命令来安装新依赖项

$ php composer.phar update

现在,Composer将自动下载所有必需的文件,并为您安装它们。剩下要做的就是更新您的AppKernel.php文件,并注册新插件

<?php

// in AppKernel::registerBundles()
$bundles = array(
    // ...
    new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(),
    // ...
);

步骤1(替代方案):使用deps文件(Symfony 2.0.x)

首先,从代码中检出一份副本。只需将以下内容添加到Symfony标准分发的deps文件中

[EWZRecaptchaBundle]
    git=http://github.com/excelwebzone/EWZRecaptchaBundle.git
    target=/bundles/EWZ/Bundle/RecaptchaBundle

注意:您可以在上面片段中添加version标签,以使用最新的稳定分支,例如version=origin/2.0

然后使用您的内核注册此插件

<?php

// in AppKernel::registerBundles()
$bundles = array(
    // ...
    new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(),
    // ...
);

请确保您还使用自动加载器注册了命名空间

<?php

// app/autoload.php
$loader->registerNamespaces(array(
    // ...
    'EWZ'              => __DIR__.'/../vendor/bundles',
    // ...
));

现在使用vendors脚本来将新添加的仓库克隆到您的项目中

$ php bin/vendors install

步骤1(替代方案):使用子模块(Symfony 2.0.x)

如果您使用子模块管理您的供应商库,首先创建vendor/bundles/EWZ/Bundle目录

$ mkdir -pv vendor/bundles/EWZ/Bundle

接下来,添加必要的子模块

$ git submodule add git://github.com/excelwebzone/EWZRecaptchaBundle.git vendor/bundles/EWZ/Bundle/RecaptchaBundle

步骤2:配置自动加载器

将以下条目添加到您的自动加载器中

<?php
// app/autoload.php

$loader->registerNamespaces(array(
    // ...

    'EWZ' => __DIR__.'/../vendor/bundles',
));

步骤3:启用插件

最后,在内核中启用该插件

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...

        new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(),
    );
}

步骤4:配置插件的

最后,将以下内容添加到您的配置文件中

# app/config/config.yml

ewz_recaptcha:
    public_key:   here_is_your_public_key
    private_key:  here_is_your_private_key
    secure:       false
    locale_key:   kernel.default_locale

注意:如果您使用安全的reCAPTCHA URL,请在安全处放置true(默认值为false)。

您可以通过JavaScript轻松禁用reCAPTCHA(例如在本地或测试环境中)

# app/config/config.yml

ewz_recaptcha:
    // ...
    enabled: false

恭喜!您已准备好!

基本用法

在创建新的表单类时,请添加以下行以创建字段

<?php

public function buildForm(FormBuilder $builder, array $options)
{
    // ...
    $builder->add('recaptcha', 'ewz_recaptcha');
    // ...
}

您可以使用“attr > options”选项向reCAPTCHA传递额外选项

<?php

public function buildForm(FormBuilder $builder, array $options)
{
    // ...
    $builder->add('recaptcha', 'ewz_recaptcha', array(
        'attr' => array(
            'options' => array(
                'theme' => 'clean'
            )
        )
    ));
    // ...
}

使用以下内容验证字段

<?php

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints as Recaptcha;

/**
 * @Recaptcha\True
 */
public $recaptcha;

另一种方法是将验证约束作为您的FormType的选项传递。这样,您的数据类只包含有意义的属性。以上面的例子为例,buildForm方法将如下所示。请注意,如果您设置了mapped=>false,则注释将不起作用。您还必须设置constraints

<?php

use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\True;

public function buildForm(FormBuilder $builder, array $options)
{
    // ...
    $builder->add('recaptcha', 'ewz_recaptcha', array(
        'attr'          => array(
            'options' => array(
                'theme' => 'clean'
            )
        ),
        'mapped' => false,
        'constraints'   => array(
            new True()
        )
    ));
    // ...

好,现在您可以开始实现表单小部件了

PHP:

<?php $view['form']->setTheme($form, array('EWZRecaptchaBundle:Form')) ?>

<?php echo $view['form']->widget($form['recaptcha'], array(
    'attr' => array(
        'options' => array(
            'theme' => 'clean',
        ),
    ),
)) ?>

Twig:

{% form_theme form 'EWZRecaptchaBundle:Form:ewz_recaptcha_widget.html.twig' %}

{{ form_widget(form.recaptcha, { 'attr': {
    'options' : {
        'theme' : 'clean',
    },
} }) }}

如果您不使用表单,您仍然可以使用JavaScript实现reCAPTCHA字段

PHP:

<div id="recaptcha-container"></div>
<script type="text/javascript">
    $(document).ready(function() {
        $.getScript("<?php echo \EWZ\Bundle\RecaptchaBundle\Form\Type\RecaptchaType::RECAPTCHA_API_JS_SERVER ?>", function() {
            Recaptcha.create("<?php echo $form['recaptcha']->get('public_key') ?>", "recaptcha-container", {
                theme: "clean",
            });
        });
    };
</script>

Twig:

<div id="recaptcha-container"></div>
<script type="text/javascript">
    $(document).ready(function() {
        $.getScript("{{ constant('\\EWZ\\Bundle\\RecaptchaBundle\\Form\\Type\\RecaptchaType::RECAPTCHA_API_JS_SERVER') }}", function() {
            Recaptcha.create("{{ form.recaptcha.get('public_key') }}", "recaptcha-container", {
                theme: "clean"
            });
        });
    });
</script>

自定义

如果您想使用自定义主题,请将您的代码块放在设置主题之前

 <div id="recaptcha_widget">
   <div id="recaptcha_image"></div>
   <div class="recaptcha_only_if_incorrect_sol" style="color:red">Incorrect please try again</div>

   <span class="recaptcha_only_if_image">Enter the words above:</span>
   <span class="recaptcha_only_if_audio">Enter the numbers you hear:</span>

   <input type="text" id="recaptcha_response_field" name="recaptcha_response_field" />

   <div><a href="javascript:Recaptcha.reload()">Get another CAPTCHA</a></div>
   <div class="recaptcha_only_if_image"><a href="javascript:Recaptcha.switch_type('audio')">Get an audio CAPTCHA</a></div>
   <div class="recaptcha_only_if_audio"><a href="javascript:Recaptcha.switch_type('image')">Get an image CAPTCHA</a></div>

   <div><a href="javascript:Recaptcha.showhelp()">Help</a></div>
 </div>

{% form_theme form 'EWZRecaptchaBundle:Form:ewz_recaptcha_widget.html.twig' %}

{{ form_widget(form.recaptcha, { 'attr': {
    'options' : {
        'theme' : 'custom',
    },
} }) }}

进一步阅读自定义reCAPTCHA的外观和感觉