2017-08-17 3 views
0

Je veux avoir un système recaptcha à mon formulaire de contact symfony. Pour cela, j'utilise un EWZRecaptchaBundle. Mais j'essaie beaucoup de trucs trucs pour courir recaptcha mais ma forme soumettre exécuter sans test de validation widget recaptcha (invisible et visible)Recaptcha google avec EWZRecaptchaBundle pour Symfony

Pouvez-vous m'aider à exécuter recaptcha correctement. Mon formulaire de soumission fonctionne sans traiter avec recaptcha mais j'ai l'affichage du widget correctement.

config.yml

ewz_recaptcha: 
    public_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    private_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 
    locale_key: %kernel.default_locale% 
    locale_from_request: false 
    enabled: true 
    verify_host: true 
    ajax: false 

ContactType

 ->add('recaptcha', EWZRecaptchaType::class, array(
      'attr' => array(
       'options' => array(
        'theme' => 'light', 
        'type' => 'image', 
        'size' => 'invisible', 
        'defer' => true, 
        'async' => true, 
        'callback' => 'onReCaptchaSuccess', 
        'bind' => 'contact_submit', 
       ) 
      ), 
      'mapped'  => false, 
      'constraints' => array(
       new RecaptchaTrue() 
      ) 
      ) 
     ) 

//  ->add('recaptcha', EWZRecaptchaType::class) 

     ->add('submit', SubmitType::class, [ 
      'label' => 'form.submit.send', 
      'attr' => ['class' => 'btn1 form_recaptcha_submit', 'id' => 'contact_submit'] 
     ]) 

modèle Twig

{{ form_widget(form.recaptcha, { 'attr': { 
     'options' : { 
      'theme': 'light', 
      'type': 'image', 
      'size': 'invisible' 
     }, 
    } }) }} 

contact (entité)

je mon champ recaptcha

private $recaptcha; 
  • Je le widget recaptcha google qui affichent correctement mais ma soumettre le formulaire ne travaille pas avec cela. jamais.
  • Je me suis inscrit mon nom de domaine sur le site google recaptcha

Répondre

0

Vous devez définir la validation de votre formulaire (il est également possible de valider dans la classe d'entité). Aussi dans mon cas je n'ai pas créé de champ dans mon âme. J'ai préféré utiliser ce que nous appelons un champ "non mappé". Pour utiliser un non champ cartographié il vous suffit d'utiliser 'cartographiés' => false, dans votre contactType

je vous montre ci-dessous le code je:

Mon ContactType:

  ->add('recaptcha', EWZRecaptchaType::class, array(
       'attr' => array(
        'options' => array(
         'theme' => 'light', 
         'type' => 'image', 
         'size' => 'normal', 
         'defer' => true, 
         'async' => true, 
        ) 
       ) 
       , 
       'mapped' => false, 
       'constraints' => array(
        new RecaptchaTrue() 
       ) 
      )) 

Je donne vous mon config.yml afin que vous puissiez voir que je ne ai pas besoin que beaucoup d'options à définir pour faire des travaux recaptcha:

ewz_recaptcha: 
    public_key: xxxx 
    private_key: xxxx 
    # Not needed as "%kernel.default_locale%" is the default value for the locale key 
    locale_key: %kernel.default_locale% 
    locale_from_request: true 

modifier: pour afficher le widget recaptcha avec brindille dans mon modèle, je viens d'utiliser {{ forme _end (form)}} et le widget recaptcha est au-dessus du bouton submit.

modifier 2: Vous ne devez faire aucune validation dans votre contrôleur mais celui-ci:

if ($contactForm->isSubmitted() && $contactForm->isValid()) 
{ 
    //your logic 
} 
+0

code très similaire, je l'ai déjà. Le comportement du bouton submit est le même que précédemment. Cela ne fonctionne pas avec le système recaptcha. Widget display mais rien de données envoyé au formulaire ou autres. – darkomen

+0

donc dans votre controlleur si vous faites if ($ contactForm-> isSubmitted() && $ contactForm-> isValid()) { die ('bonjour'); } vous ne voyez pas la chaîne "bonjour"? Si oui, la recapatcha est confirmée. – Mz1907

+0

Comment le comportement du robot de test pour confirmer recaptcha fonctionne-t-il correctement? – darkomen