Cheerymagicsoftware official page


Programming is a cheery magic!


Google reCAPTCHA V2 widget for Yii Framework 1.

Author Poliakov Vladimir.
Recently we needed integrate recaptcha to login and registration forms. Project was on Yii 1 framework. These forms were show in defferent modal windows. All most realized widgets reCaptcha v2 for Yii1 were for “single form” mode with tag. And we decided to fix the situation - create the universal widget.

In official docs google reCaptcha has 2 method for render widget: onload and explicit. Standart render “onload” in tag with class ‘g-recaptcha’ (1):


        <?php

    Yii::import('application.extensions.reCaptcha2.SReCaptcha');
    $this->widget('SReCaptcha',
      [
            'name' => 'reCaptcha', 
            'siteKey' => Yii::app()->params['reCaptcha2PublicKey'], 
            'widgetOptions' => ['class' => 'col-lg-3'],
            'theme' => SReCaptcha::THEME_DARK,
            'size' => SReCaptcha::SIZE_COMPACT,
            'jsCallback' => 'console.log("reCaptcha is ready!");console.log(response);',
            'jsExpiredCallback' => 'console.log("reCaptcha is expired!");'
      ]
    );

Description: name - Prefer use name like “reCaptcha” and this is required parameter. siteKey - Public key reCaptcha and this is required parameter. widgetOptions - Additional html widget options, such as class. theme - Recaptcha themes (dark or light). size - Recaptcha size (normal or compact). jsCallback - Will call js code after successfull captcha response. Parameter “response” is the key (g-recaptcha-response) will be send to verify server. jsExpiredCallback - Js code if reCaptcha is expired.

Ok. Code Example if you want use captcha in Active Form with model (2):


        <?php

    $form->widget('application.extensions.reCaptcha2.SReCaptcha',
        [
            'name' => 'reCaptcha', //is requred
            'siteKey' => Yii::app()->params['reCaptcha2PublicKey'], //is requred
            'model' => $model,
            //'attribute' => 'reCaptcha' //if we use model name equal attribute or customize attribute
        ]
    );

You may use params like descripted above (1).

In case render “explicit” needed add parameter ‘render’ and see params for “grecaptcha.render parameters”:

    
        
LOGIN FORM: Username: Password:
REGISTRATION FORM: Username: Password: Confirm Password:

    
    $this->widget('application.extensions.reCaptcha2.SReCaptcha',
        [
            'siteKey' => Yii::app()->params['reCaptcha2PublicKey'],
            'render' => [
                'reCaptchaLogin' => [
                    'callback' => 'console.log("#reCaptchaLogin is ready!");',
                    'theme' => 'dark',
                    'expired-callback' => 'console.log("#reCaptchaLogin is expired!");'
                ],
                'reCaptchaReg' => [
                    'size' => 'compact',
                    'callback' => 'console.log("#reCaptchaReg is ready!");console.log(response);',
                ]
            ],
        ]
    );
    

And don’t forget add validator, for example code for your model:


    
    public $reCaptcha;
   //...
   
   public function rules()
   {
     return [
         // ...
         // secret is required
         ['reCaptcha', 'application.extensions.reCaptcha2.SReCaptchaValidator', 'secret' => Yii::app()->params['reCaptcha2PrivateKey'],'message' => 'The verification code is incorrect.']
         // ...
     ];
   }

That’s all. I hope, the widget will be useful. Download

Protected by Copyscape