yii2-recaptcha

Google ReCaptcha v2.0 Yii 2.x.x extension

MIT License

Downloads
19.8K
Stars
6

Google ReCaptcha v2.0 Yii 2.x.x extension

The main difference from the similar extensions is that this one doesn't require an application component with constant name, such as \Yii::$app->recaptcha or something.

Install

Either run

php composer.phar require --prefer-dist brussens/yii2-recaptcha "*"

or add

"brussens/yii2-recaptcha": "*"

to the require section of your composer.json file.

Add to your bootstrap file:


$container->setSingleton(\ReCaptcha\ReCaptcha::class, function($container, $params, $config) {
    return new \ReCaptcha\ReCaptcha('your secret');
});

$container->set(\brussens\yii2\extensions\recaptcha\Widget::class, function($container, $params, $config) {
    return new \brussens\yii2\extensions\recaptcha\Widget('your site key', \Yii::$app->language, $config);
});

Since Yii 2.0.11 you can also configure the container in the 'container' section of the app configuration:

'container' => [
    'definitions' => [
        \brussens\yii2\extensions\recaptcha\Widget::class => function($container, $params, $config) {
            return new \brussens\yii2\extensions\recaptcha\Widget('your site key', \Yii::$app->language, $config);
        }
    ],
    'singletons' => [
         \ReCaptcha\ReCaptcha::class => function($container, $params, $config) {
             return new \ReCaptcha\ReCaptcha('your secret');
         }
    ]
]

Add in your model validation rules

public function rules()
{
    return [
        ...
        ['verifyCode', \brussens\yii2\extensions\recaptcha\Validator::className()],
        ...
    ];
}

Add in your view

echo $form->field($model, 'verifyCode')->widget(\brussens\yii2\extensions\recaptcha\Widget::className());

If you use Pjax or multiple widgets on page

echo $form->field($model, 'verifyCode')->widget(
    \brussens\yii2\extensions\recaptcha\Widget::className(), [
    'options' => [
        'id' => 'insert-unique-widget-id'
    ]
]);