ReCaptcha with Zend Form

Requirements

Simple ReCaptcha

Zend Form Class

source: application/forms/ReCaptcha.php

<?php
class Form_ReCaptcha extends Zend_Form
{
    public function init()
    {
        $this->setMethod('post');
        //Add your elements here...

        $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey);

        $captcha = new Zend_Form_Element_Captcha('challenge',
              array('captcha'        => 'ReCaptcha',
                    'captchaOptions' => array('captcha' => 'ReCaptcha', 'service' => $recaptcha)));

        $this->addElement($captcha);

        // Add the submit button
        $this->addElement('submit', 'submit', array('label' => 'Submit'));
    }
}
?>

Zend Controller Class

source: application/controller/ReCaptchaController.php

<?php
class ReCaptchaController extends Zend_Controller_Action
{
    public function indexAction()
    {
        require_once APPLICATION_PATH . '/forms/Contact.php';

        $form = new Form_ReCaptcha();

        if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey);

                $result = $recaptcha->verify($this->_getParam('recaptcha_challenge_field'),
                                             $this->_getParam('recaptcha_response_field'));
                if (!$result->isValid()) {
                    //ReCaptcha validation error
                    //Your action here...
               }
            }
        }
        $this->view->form = $form;
    }
}
?>

Customized ReCaptcha

You may also want to internationalizing or change colors to ReCaptcha, to do it you need to specify some options for the Zend_Service_ReCaptcha object.
See the ReCaptcha wiki for a complete list of available options.

Zend Form Class

source: application/forms/ReCaptcha.php

<?php
class Form_ReCaptcha extends Zend_Form
{
    public function init()
    {
        $this->setMethod('post');
        //Add your elements here...
        $recaptcha = new Zend_Service_ReCaptcha($publickey, $privatekey);

        //Translate in your language
        $recaptcha_it_translation =
            array('visual_challenge' => "Verifica video",
                  'audio_challenge' => "Verifica audio",
                  'refresh_btn' => "Effettua una nuova verifica",
                  'instructions_visual' => "Scrivi le due parole",
                  'instructions_audio' => "Scrivi quello che ascolti",
                  'help_btn' => "Aiuto",
                  'play_again' => "Riascolto di nuovo l'audio",
                  'cant_hear_this' => "Scarica l'audio come MP3",
                  'incorrect_try_again' => "Incorretto. Prova ancora.");

        $recaptcha->setOption('custom_translations', $recaptcha_it_translation);
        //Change theme
        $recaptcha->setOption('theme', 'clean');

        $captcha = new Zend_Form_Element_Captcha('challenge',
              array('captcha'        => 'ReCaptcha',
                    'captchaOptions' => array('captcha' => 'ReCaptcha',
                                             'service' => $recaptcha)));

        $this->addElement($captcha);

        // Add the submit button
        $this->addElement('submit', 'submit', array('label' => 'Submit'));
    }
}
?>

Tags: , , ,

  1. jorge’s avatar

    Thanks youuuuuuuuuuuuuu very much.

    I was looking for the translations options!

  2. Garry’s avatar

    I want to know how to add fields in re-captcha form.. can you suggest me any good one

  3. Luca Corbo’s avatar

    You may add your fields in the application/forms/ReCaptcha.php file. For documentation and examples you may take a look at the Zend_Form Quick Start

  4. Simon Griffiths’s avatar

    With 1.10.3 you not longer need the controller code as the recaptcha request would be submitted twice. Now when you build the form the recaptcha fields are valided against the captcha adapter.

    All you need to do in the controller is call $form->isValid() to check the form is valid captcha and all other fields included.

  5. TMR’s avatar

    Been working on figuring out how to insert ReCaptcha in Zend forms for a couple of hours now, and I’ve been finding that there isn’t much to go in the ZF documentation.

    Thank you very much for sharing this!

  6. anon’s avatar

    Thank you for this tutorial.. Nice to know that it is possible to tweak so many options!

  7. Dawid’s avatar

    Zend Framework Version: 1.11.4

    Great code piece. I’ve just added to element creation code in form class (didn’t change anything in the validation code in controller class) and it works perfectly.

    Thanks

  8. mustafa’s avatar

    thanks good tutorial ;)

Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>