conradfr / symfony-captcha-bundle

BotDetect PHP CAPTCHA generator integration for the Symfony framework.

Home Page:https://captcha.com/doc/php/symfony-captcha-bundle-quickstart.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ATTENTION!!! This library is not the official one, but since the official one does not seem to have support anymore I've decided to fully update it so it's working again for newer Symfony versions. I haven't put any efforts on making it compatible with Symfony 4 or older versions, but contributions are welcome.

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.

About

BotDetect PHP CAPTCHA generator integration for the Symfony framework.

https://captcha.com/doc/php/symfony-captcha-bundle-quickstart.html


Languages

Language:PHP 99.5%Language:Twig 0.5%