Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je suis en trais d'essayer la beta 4 de ZF2. Je voudrais affciher un formulaire d'enregistrement avec un captcha. Mais petit souci, aucun captcha n'est affiché, et aucune erreur n'est renvoyée.
Voci ce que j'ai fait
Un RegisterForm dans modulexxx/Form:
class RegisterForm extends Form{ public function __construct() { parent::__construct(); $this->setName('register'); $this->setAttribute('method', 'post'); $this->setAttribute('action', 'user/register'); $this->add(array( 'name' => 'login', 'attributes' => array( 'type' => 'text', .... $this->add(array( 'type' => 'Zend\Form\Element\Captcha', 'name' => 'captcha', 'attributes' => array( 'label' => 'Please verify you are human', 'captcha' => array( 'class' => 'Dumb', 'options' => array( ), ), ), ) ); ....
Un LoginController dans modulexxx/Controller avec le code suivant :
public function registerAction(){ $ans = null; $sm = $this->getServiceLocator(); $request = $this->getRequest(); if ($request->isPost()) { // TODO : Register l'utilisateur }else{ $form = new RegisterForm(); // $sm->get('sessions-contener') returns a Container instance containing my SessionManager $form->get('captcha')->getCaptcha()->setSession($sm->get('sessions-contener')); $ans = array('form' => $form); } return $ans; }
Eu ma vue :
<div id="registerBox" class="loginBox"> <? $form = $this->form; ?> <?php echo $this->form()->openTag($form); ?> <fieldset class="none"> .... </div> <!-- --> <div class="centered"> <?php // TODO : Voir pourquoi la secu et le captcha s'affichent pas echo $this->formLabel($form->get('captcha')); echo $this->formInput($form->get('captcha')); echo $this->formElementErrors($form->get('captcha')); //echo $this->formLabel()->closeTag(); ?> </div> <div class="centered"> ....
Lorsque j'exécute, j'ai le code HTML suivant :
... <div class="centered"> <label for="captcha">Please verify you are human</label><input name="captcha" type="text"> </div> <div class="centered"> ...
Et aucun captcha !
Je suis bloqué sur le problème depuis deux jours. Si vous avez une idée du pourquoi ça rate, n'hésitez pas !
Merci.
Dernière modification par zf2user (18-06-2012 09:43:30)
Hors ligne
Salut Zf2user, je n'ai pas eu l'occasion de tester mais essai de regarder ce qui est fait ici de mémoire il utilise ce composant https://github.com/ZF-Commons/ZfcUser
Hors ligne
Merci pour ta réponse, Orkin.
Bon, je viens de mettre le nez dans le code source de ZF2.
Il ne faut pas utiliser la classe Dumb mais Image.
Voici un exemple qui fonctionne :
$this->add(array( 'type' => 'Zend\Form\Element\Captcha', 'name' => 'captcha', 'attributes' => array( 'required' => true, 'allowEmpty' => false, 'label' => 'Entrez le texte ci dessus', 'captcha' => array( 'class' => 'Image', 'options' => array( 'font' => '/var/www/Zend2Project/zf2XXX/data/fonts/arial.ttf', ), ), ), ) );
Puis dans votre vue :
<!-- --> <img src="<?php echo $basePath."/images/captcha/".$form->get('captcha')->getCaptcha()->generate().".png"; ?>"> <br> <div class="registerFormLabel"> // <?php echo $this->formLabel($form->get('captcha')); ?> <div class="registerFormInput"> <?php echo $this->formInput($form->get('captcha')); echo $this->formElementErrors($form->get('captcha')); ?> </div>
Le captcha est généré dans votre public/images/captcha. Pensez à le supprimer !
Il vous faudra aussi un fichier de polices .ttf pour générer le captcha.
Ca pourra en aider d'autres...
Tutu http://www.hackbbs.org
Dernière modification par zf2user (18-06-2012 12:27:35)
Hors ligne