carlos-mg89/symfony-captcha-bundle

There is no license information available for the latest version (4.2.21) of this package.

Symfony Captcha Bundle -- BotDetect PHP CAPTCHA generator integration for the Symfony framework.

4.2.21 2020-12-09 16:08 UTC

README

BotDetect PHP Captcha generator integration for the Symfony 5 framework (possibly on Symfony 4.4 too)

Total Downloads Latest Stable Version

BotDetect PHP CAPTCHA Library

BotDetect Symfony CAPTCHA integration on captcha.com

Other BotDetect PHP Captcha integrations

Questions?

If you encounter bugs, implementation issues, a usage scenario you would like to discuss, or you have any questions, please contact BotDetect CAPTCHA Support.

How to install with Composer

Simply run composer require carlos-mg89/symfony-captcha-bundle

Usage example in a Symfony 5.x project

  1. Install dependency with Composer as explained above
  2. Add the following in your config/routes.yaml:
    captcha_routing:
          resource: "@CaptchaBundle/Resources/config/routing.yml"
    
  3. Create this file config/packages/captcha.php with the following content (or similar):
    <?php
     if (!class_exists('CaptchaConfiguration')) { return; }
    
     // You could have more than one object like ExampleCaptcha. For example, one for the login page, another for the register page, etc.
     return [
       'ExampleCaptcha' => [
         'UserInputID' => 'captchaCode',
         'CodeLength' => CaptchaRandomization::GetRandomCodeLength(5, 6),
         'ImageWidth' => 250,
         'ImageHeight' => 50,
       ],
     ];
    
  4. Edit your config/services.yaml so it autowires the controllers used in the library:
    # We need to autowire the Container (or manually wire it)
    services:
        Captcha\Bundle\CaptchaBundle\Controller\:
            resource: '../vendor/carlos-mg89/symfony-captcha-bundle/Controller'
            autowire: true
    
  5. Edit your FormType or your FormBuilderInterface with this bit that adds the captcha along with the constraing to validate the form:
    $builder->add('captchaCode', CaptchaType::class, [
        'captchaConfig' => 'ExampleCaptcha',
        'constraints' => [
            new ValidCaptcha([
                'message' => 'Invalid captcha, please try again',
            ]),
        ]
    ]);
    
  6. Now edit your Twig template with the new captchaCode (CaptchaType):
    {{ form_label(form.captchaCode) }}
    {{ form_widget(form.captchaCode}) }}
    
  7. Finally, add the Form validation:
    $contactForm = $this->createForm(ContactType::class);
    $contactForm->handleRequest($request);
    
    if ($contactForm->isSubmitted() && $contactForm->isValid()) {
        
        // Do whatever you want, be it register a user, send an email, etc
    
        $this->addFlash('success', $translator->trans('Contact.Form.SuccessMsg'));
    } elseif ($contactForm->isSubmitted() && !$contactForm->isValid()) {
        throw new Exception('Invalid form');
    }
    

You have the original documentation here: https://captcha.com/doc/php/howto/symfony-captcha-bundle-integration.html#howto_display_captcha_config but it's not fully up to date nor complete.