SYMFONY - Champ de vérification Captcha pour un formulaire

SYMFONY - Champ de vérification Captcha pour un formulaire - Divers - Programmation

Marsh Posté le 30-11-2010 à 11:31:47    

Bonjour !
 
Je suis actuellement en train de développer un site avec Symfony et je bloque avec la mise en place d'un champ de vérification Captcha dans un formulaire de contact très simple.
 
J'utilise le plugin sfCryptoCaptchaPlugin que j'ai téléchargé sur le site officiel, décompressé et déposé dans C:\wamp\www\monProjet
En ligne de commande, j'ai ensuite tapé le chemin d'accès au dossier (même chemin que ci-dessus) puis la commande :
 
symfony plugin:install -s beta sfCryptoCaptchaPlugin
 
C'est la première fois que j'installe un plugin et je ne sais pas si j'ai suivi une démarche correcte...
 
Si jamais le problème venait du code, je vous le mets juste en dessous.
Tout d'abord, le code de mon ContactForm :
 
 

Code :
  1. <?php
  2. class ContactForm extends sfForm
  3. {
  4. public function configure()
  5. {
  6. $this->setWidgets(array(
  7. 'Nom' => new sfWidgetFormInput(),
  8. 'Prenom' => new sfWidgetFormInput(),
  9. 'Email' => new sfWidgetFormInput(),
  10. 'Message' => new sfWidgetFormTextarea(),
  11. 'Captcha' => new sfWidgetFormInput(),
  12. ));
  13. $this->widgetSchema->setNameFormat('contact[%s]');
  14. $this->setValidators(array(
  15. 'Nom' => new sfValidatorString(
  16. array('required' => true, 'min_length' => 3, 'max_length' => 50),
  17. array('required' => 'Nom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
  18. 'Prenom' => new sfValidatorString(
  19. array('required' => true, 'min_length' => 3, 'max_length' => 50),
  20. array('required' => 'Prenom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
  21. 'Email' => new sfValidatorEmail(
  22. array('required'=>true),
  23. array('required' => 'Email obligatoire', 'invalid' => 'Adresse email invalide')),
  24. 'Message' => new sfValidatorString(
  25. array('required'=>true, 'min_length' => 4),
  26. array('required' => 'Message obligatoire','min_length' => 'Le message est trop court')),
  27. 'Captcha' => new sfValidatorSfCryptoCaptcha(
  28. array('required' => true, 'trim' => true),
  29. array('wrong_captcha' => 'Code invalide', 'required' => 'Champ obligatoire')),
  30. ));
  31. $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
  32. }
  33. }
  34. ?>


 
 
Le code de mon indexSuccess dans lequel j'affiche le formulaire :
 
 

Code :
  1. <?php
  2. // in the head of your template, call the helper
  3. use_helper('sfCryptoCaptcha');
  4. //the helper functions
  5. captcha_image();
  6. captcha_reload_button();
  7. ?>
  8. <h1>Envoyer un message</h1>
  9. <form action="<?php echo url_for('contact/index') ?>" method="POST">
  10. <table>
  11. <tr>
  12. <th>
  13. <?php echo $form['Nom']->renderLabel(); ?>
  14. </th>
  15. <td>
  16. <?php echo $form['Nom']->render(); ?>
  17. </td>
  18. </tr>
  19. <tr>
  20. <th>
  21. <?php echo $form['Prenom']->renderLabel(); ?>
  22. </th>
  23. <td>
  24. <?php echo $form['Prenom']->render(); ?>
  25. </td>
  26. </tr>
  27. <tr>
  28. <th>
  29. <?php echo $form['Email']->renderLabel(); ?>
  30. </th>
  31. <td>
  32. <?php echo $form['Email']->render(); ?>
  33. </td>
  34. </tr>
  35. <tr>
  36. <th>
  37. <?php echo $form['Message']->renderLabel(); ?>
  38. </th>
  39. <td>
  40. <?php echo $form['Message']->render(); ?>
  41. </td>
  42. </tr>
  43. <tr>
  44. <th><?php echo $form['Captcha']->renderLabel(); ?></th>
  45. <td>
  46. <?php echo $form['Captcha']->renderError(); ?>
  47. <?php echo $form['Captcha']->render(); ?>
  48. </td>
  49. <td><?php echo captcha_image(); echo captcha_reload_button(); ?></td>
  50. </tr>
  51. <tr>
  52. <td colspan="2" align="right">
  53. <input type="submit" value="Envoyer"/>
  54. </td>
  55. </tr>
  56. </table>
  57. </form>


 
 
Tout cela ne marche pas et j'obtiens l'erreur :
"Widget "Captcha" does not exist."
L'erreur semble venir de mon indexSuccess, à la ligne suivante :
<th><?php echo $form['Captcha']->renderLabel(); ?></th>
 
Si vous voyez d'où l'erreur peut provenir, cela m'aiderait vraiment car je suis complètement perdue... :euh:
 
Merci d'avance pour vos réponses !

Reply

Marsh Posté le 30-11-2010 à 11:31:47   

Reply

Marsh Posté le 08-12-2010 à 15:31:38    

J'ai finalement décidé de me tourner vers le sfWidgetFormReCaptcha qui m'avait l'air plus simple d'utilisation.
 
Je me suis procurée une clé privée et publique en créant mon compte sur reCaptcha et j'ai modifié mon fichier app.yml en conséquent :
 

Code :
  1. # default values
  2. all:
  3.   recaptcha:
  4.     active: true
  5.     public_key:      ............
  6.     private_key:     ..........


 
J'ai ensuite modifié mon formulaire :
 

Code :
  1. $this->setWidgets(array(
  2.   'Captcha' => new sfWidgetFormReCaptcha(array(
  3.   'public_key' => sfConfig::get('app_recaptcha_public_key'))),
  4.   ));


 
Et mis en place le validator associé :  
 

Code :
  1. $this->setValidators(array(
  2.   'Captcha' => new sfValidatorReCaptcha(
  3.    array('required'=>true,'private_key' => sfConfig::get('app_recaptcha_private_key')),
  4.    array('required'=>'Champ obligatoire')),
  5.    ));


 
J'ai entendu parler d'un $this->validatorSchema->setPostValidator
Faut-il que je l'intègre à mon code ?  
 
Merci d'avance pour vos réponses...


Message édité par colimasson le 08-12-2010 à 15:31:56
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed