Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/11/2010, 11h23   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
Par défaut Champ de vérification Captcha pour un formulaire

Bonjour,

Je suis actuellement en train de développer un site avec Symfony et j'aurais besoin d'aide en ce qui concerne le rajout d'un champ de vérification Captcha à la fin d'un formulaire de contact.

Mon formulaire ContactForm est très simple, le voici :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
class ContactForm extends sfForm
{
	public function configure()
	{
		$this->setWidgets(array(
			'Nom' => new sfWidgetFormInput(),
			'Prenom' => new sfWidgetFormInput(),
			'Email' => new sfWidgetFormInput(),
			'Message' => new sfWidgetFormTextarea(),
			));
 
		$this->widgetSchema->setNameFormat('contact[%s]');
 
		$this->setValidators(array(
			'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
				array('required' => 'Nom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
			'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
				array('required' => 'Prenom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
			'Email' => new sfValidatorEmail(array('required'=>true), 
				array('required' => 'Email obligatoire', 'invalid' => 'Adresse email invalide')),
			'Message' => new sfValidatorString(array('required'=>true, 'min_length' => 4), 
				array('required' => 'Message obligatoire','min_length' => 'Le message est trop court'))
			));
 
 
 
 
	}
}
 
?>
J'ai entendu parler de sfCaptchaPlugin mais je ne sais pas du tout comment l'installer et comment l'utiliser. Si quelqu'un pouvait me fournir quelques indications à ce niveau-là, je lui en serais très reconnaissant.

Merci d'avance pour votre aide !
colimasson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 14h19   #2
Futur Membre du Club
 
Jean-Yves
Développeur Web
Inscription : mai 2007
Messages : 49
Détails du profil
Informations personnelles :
Nom : Jean-Yves
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2007
Messages : 49
Points : 17
Points : 17
Perso, je te conseille : sfCryptoCaptcha, simple à installer, qui fonctionne même en local avec Wamp pour le tester !

Une fois installé, il faut juste ajouter dans ton formulaire :

Code :
1
2
3
4
5
6
7
$this->setWidgets(array(
'Nom' => new sfWidgetFormInput(),
'Prenom' => new sfWidgetFormInput(),
'Email' => new sfWidgetFormInput(),
'Message' => new sfWidgetFormTextarea(),
'captcha'       => new sfWidgetFormInput(),
));
plus

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
$this->setValidators(array(
'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
array('required' => 'Nom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
array('required' => 'Prenom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
'Email' => new sfValidatorEmail(array('required'=>true),
array('required' => 'Email obligatoire', 'invalid' => 'Adresse email invalide')),
'Message' => new sfValidatorString(array('required'=>true, 'min_length' => 4),
array('required' => 'Message obligatoire','min_length' => 'Le message est trop court')),
'captcha' => new sfValidatorSfCryptoCaptcha(array('required' => true, 'trim' => true),
                                                   array('wrong_captcha' => 'Le code que vous avez copier n\'est pas valide.',
                                                         'required' => 'Vous n\'avez pas copier le code de sécurité.')),
));
et aussi :
Code :
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
et après le template "newSuccess" ou autres qui appel le formulaire :
Code :
1
2
3
4
5
6
7
<?php
// in the head of your template, call the helper
use_helper('sfCryptoCaptcha');
//the helper functions
captcha_image();
captcha_reload_button();
?>
et après ton template "_form" dont la mise en forme est en liste pour moi, je rajoute manuellement :
Code :
 <li><span><label for="votreavis_captcha_code"><?php echo captcha_reload_button();?></label></span><?php echo captcha_image(); ?></li>
Et après c'est nickel, pas de service externe, comme avec sfReCaptchaPlugin et une personnalisation facile dans ton fichier app.yml !

Après c'est à toi de faire un choix, moi je l'ai fait avec sfCryptoCaptchaPlugin
jylac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 15h13   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
Merci beaucoup pour ta réponse rapide et détaillée !

J'ai bien suivi toutes les étapes de ta démarche mais j'ai encore un problème...
Lorsque j'essaie d'afficher mon formulaire, j'obtiens un message d'erreur "Widget "Captcha" does not exist."

Visiblement, le problème se situerait à la ligne 50 de mon template (je l'indique en gras) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
// in the head of your template, call the helper
use_helper('sfCryptoCaptcha');

//the helper functions
captcha_image();
captcha_reload_button();
?>

<h1>Envoyer un message</h1>
<form action="<?php echo url_for('contact/index') ?>" method="POST">
  <table>
    <tr>
        <th>
        <?php echo $form['Nom']->renderLabel(); ?>
        </th>
        <td>
        <?php echo $form['Nom']->render(); ?>
        </td>
    </tr>
	
	<tr>
        <th>
        <?php echo $form['Prenom']->renderLabel(); ?>
        </th>
        <td>
        <?php echo $form['Prenom']->render(); ?>
        </td>
    </tr>
	
	<tr>
        <th>
        <?php echo $form['Email']->renderLabel(); ?>
        </th>
        <td>
        <?php echo $form['Email']->render(); ?>
        </td>
    </tr>
	
	<tr>
        <th>
        <?php echo $form['Message']->renderLabel(); ?>
        </th>
        <td>
        <?php echo $form['Message']->render(); ?>
        </td>
    </tr>
	
    <tr>
        <th><?php echo $form['Captcha']->renderLabel(); ?></th>
        <td>
        <?php echo $form['Captcha']->renderError(); ?>
        <?php echo $form['Captcha']->render(); ?>
        </td>
        <td><?php echo captcha_image(); echo captcha_reload_button(); ?></td>
    </tr>
    <tr>
      <td colspan="2" align="right">
        <input type="submit" value="Envoyer"/>
      </td>
    </tr>
  </table>
</form>
Je ne comprends pas car mon widget s'appelle bien 'Captcha' dans mon formulaire, que j'ai complété exactement comme dans ton exemple.

Penses-tu savoir d'où vient le problème ?

Merci encore !
colimasson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 10h10   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
Je me demande finalement si j'ai bien installé le plugin...

Je l'ai téléchargé sur le site officiel, je l'ai dézippé et j'ai mis le dossier dans C:\wamp\www\nomProjet

J'ai ensuite suivi les indications d'installation sur le site officiel.
En ligne de commande, j'ai écrit l'adresse du chemin puis tapé la commande

symfony plugin:install -s beta sfCryptoCaptchaPlugin

Je n'ai eu aucun message d'erreur et il me semblait que tout était bien installé. Je m'interroge donc vraiment sur l'erreur "Widget "Captcha" does not exist."

Il s'agit peut-être de quelque chose de très simple mais étant débutante, je maîtrise encore mal les subtilités de Symfony et j'aurais vraiment besoin de votre aide.

Merci d'avance pour vos réponses.
colimasson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 21h26   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Perso, j'utilise le captcha qui est fourni avec le plugin : sfFormExtraPlugin

C'est le même captcha, il marche et il offre plein d'autres widgets et validators indispensables.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 15h21   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
Merci pour ce conseil mais 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
2
3
4
5
6
# default values
all:
  recaptcha:
    active: true
    public_key:      ............
    private_key:     ..........
J'ai ensuite modifié mon formulaire :

Code :
1
2
3
4
$this->setWidgets(array(
			'Captcha' => new sfWidgetFormReCaptcha(array(
			'public_key' => sfConfig::get('app_recaptcha_public_key'))),
			));
Et mis en place le validator associé :

Code :
1
2
3
4
5
$this->setValidators(array(
			'Captcha' => new sfValidatorReCaptcha(
				array('required'=>true,'private_key' => sfConfig::get('app_recaptcha_private_key')),
				array('required'=>'Champ obligatoire')),
				));
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...
colimasson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 10h40   #7
Invité de passage
 
Inscription : novembre 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 8
Points : 0
Points : 0
Bonjour,

J'ai finalement trouvé la solution à mon problème grâce à ce lien :

Symfony

Je n'avais pas entré le code suivant dans mon actions.class :

Code :
1
2
3
4
5
$captcha = array(
  'recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'),
  'recaptcha_response_field'  => $request->getParameter('recaptcha_response_field'),
);
$this->form->bind(array_merge($request->getParameter('contact'), array('captcha' => $captcha)));
Maintenant tout fonctionne

Encore merci pour vos réponses
colimasson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h08.


 
 
 
 
Partenaires

Hébergement Web