2017-08-17 55 views
0

我想有一个recaptcha系统到我的联系表格symfony。为此,我使用了EWZRecaptchaBundle。但我尝试了很多关于运行recaptcha的技巧,但是我的表单提交运行时没有测试验证。recaptcha小部件(隐形和可见)Recaptcha谷歌与EWZRecaptchaBundle为Symfony

您能否帮助我正确运行recaptcha。我的提交表单运行时没有与recaptcha交易,但我正确显示了小部件。

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'] 
     ]) 

嫩枝模板

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

联系(实体)

我有我的领域的reCAPTCHA

private $recaptcha; 
  • 我的窗口小部件的reCAPTCHA谷歌这显示正常,但我的提交形式不符合这方面的工作。决不。
  • 我已经注册了我在谷歌网站上的reCAPTCHA域

回答

0

你需要在你的表单定义验证(也可能在实体类验证)。同样在我的情况下,我没有在我的天性中创造一个领域。我首选使用我们所说的“非映射”字段。要使用非映射字段,您只需要使用“映射” =>假的,你contactType

我告诉你我用下面的代码:

我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() 
       ) 
      )) 

我给你我config.yml所以你可以看到我不需要那个被定义很多选项,使验证码做工作:

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 

编辑:在我的模板,以显示与树枝的reCAPTCHA小工具,我只是用{{形成_end(form)}},并且recaptcha小部件位于提交按钮之上。

编辑2:你不需要做任何验证在你的控制器,但是这一个:

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

非常相似的代码,我已经有了。提交按钮的行为与之前一样。它不适用于recaptcha系统。小部件显示,但没有数据发送形式或其他。 ($ contactForm-> isSubmitted()&& $ contactForm-> isValid()) – darkomen

+0

所以在你的controlleur中如果你这样做 { die('hello'); } 你看不到字符串“hello”?如果是,那么重新确认。 – Mz1907

+0

如何测试机器人行为以确认recaptcha是否正确运行? – darkomen