Easy implementation of Google Recaptcha with symfony.
Before starting the bundle installation, you need to register reCAPTCHA keys here.
Use composer to install this bundle.
composer require victor-prdh/recaptcha-bundle
You can quickly configure this bundle by using symfony/flex:
- answer no for
google/recaptcha
- answer yes for
victor-prdh/recaptcha-bundle
If everything is good, you must have the bundle registred in the "bundles.php" file of your config folder ("config/bundles.php"):
//config/bunldes.php
<?php
return [
...
VictorPrdh\RecaptchaBundle\RecaptchaBundle::class => ['all' => true]
];
Just add it if you dont see this line.
You can directly go to Usage section
If you don't want / you can't use the flex recipe you can create a "recaptcha.yaml" file in your config folder ("config/packages/recaptcha.yaml"):
#config/packages/recaptcha.yaml
recaptcha:
google_site_key: '%env(GOOGLE_RECAPTCHA_SITE_KEY)%'
google_secret_key: '%env(GOOGLE_RECAPTCHA_SECRET_KEY)%'
Once you created this config file, you can go in your ".env" file and add this:
###> victor-prdh/recaptcha ###
# https://www.google.com/recaptcha/admin <--- get keys here
GOOGLE_RECAPTCHA_SITE_KEY='your site key'
GOOGLE_RECAPTCHA_SECRET_KEY='your secret key'
###< victor-prdh/recaptcha ###
It's time for update the bundle, if you don't do it, your keys will not be used by the bundle.
composer update victor-prdh/recaptcha-bundle
You have now a "ReCaptchaType" class available for all your forms. You can use it in your FormBuilder like a "TextType" or "PasswordType":
<?php
namespace App\Form;
use VictorPrdh\RecaptchaBundle\Form\ReCaptchaType;
class TaskType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add("recaptcha", ReCaptchaType::class);
// If you want an "invisible" recaptcha protection use this:
// $builder->add("recaptcha", ReCaptchaType::class, ["type" => "invisible"]);
}
}
Once you create the form, you render it as usual with Symfony. You can show it in your twig file like that:
{{ form_start(form) }}
{{ form_row(form.recaptcha) }}
{# must be the same name of this put on the FormBuilder #}
{{ form_errors(form.recaptcha) }}
{# That will display the error of the captcha to user #}
{{ form_end(form) }}
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
If you speak a language without translation, you're help is welcome.