2017-08-17 54 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