Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir à tous...
je continue mon apprentissage du framework, et je coince depuis le début d'après midi sur les formulaires...
J'ai créé un formulaire dont le but est l'enregistrement d'utilisateur. Mon problème c'est qu'un fois le formulaire affiché, lorsque je clique sur le bouton de validation, il ne se passe rien du tout... rien de rien...
Voilà un bout de mon code :
function registerAction()
{
$this->view->title = "Création d'un compte";
$this->view->selectedIndex = "";
$this->view->selectedCompte = "";
$this->view->selectedInscription = "current";
$this->view->selectedAbout = "";
$this->view->selectedFAQ = "";
$this->view->form = array();
$this->view->form = new Myappli_Form_Register();
$this->view->form->setMethod('post');
$this->view->form->setAction('compte/adduser');
La page compte/adduser n'est jamais afficher lorsque je clique sur le bouton de validation.
Mon formulaire se trouve dans un fichier php ailleurs... il s'affiche correctement...
merci pour votre aide.
Dernière modification par mymt (21-01-2010 13:14:45)
Hors ligne
peut-on voir le code php/html du formulaire?
Dernière modification par 3uclide (30-12-2009 04:05:53)
Hors ligne
Hello,
Je reviens.. y'a du mieux.. J'avais une erreur de syntaxe qui plantait le formulaire. Mais pour autant j'ai un autre soucis.
En fait, lorsque je poste mon formulaire, je voudrais détecter que mon formulaire a été posté (en utilsiant la même action). Pour se faire, j'utilise isPost(), mais ca me détecte jamais rien. Pourtant dans l'url, il y a bien tout les paramêtres qui sont passés...
Voici mon formulaire :
<?php //Formulaire d'inscription class Appli_Form_Register extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $login = new Zend_Form_Element_Text("login", array('size' => 25)); $loginDoesntExist = new Zend_Validate_Db_NoRecordExists('membres', 'login'); $login ->setLabel('Identifiant') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty') ->addValidator($loginDoesntExist) ->addValidator('StringLength', false, 3, 20) ->setDescription("L'identifiant doit être composé de 3 and 20 caractères alphanumériques"); $emailDoesntExist = new Zend_Validate_Db_NoRecordExists('membres', 'email'); $email = new Zend_Form_Element_Text("email", array('size' => 25)); $email ->setLabel('Adresse Email') ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty') ->addValidator($emailDoesntExist) ->addValidator('EmailAddress') ->setDescription("Adresse email valide."); $password = new Zend_Form_Element_Password("password", array('size' => 25)); $password ->setLabel('Mot de passe') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $repassword = new Zend_Form_Element_Password("repassword", array('size' => 25)); $repassword ->setLabel('Retapper le mot de passe') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $repassword->setDescription("Retapper votre mot de passe pour prévenir toute erreur."); //Nom $nom = new Zend_Form_Element_Text("nom", array('size' => 25)); $nom ->setLabel('Votre nom') ->addFilter('StringTrim') ->addValidator('NotEmpty'); //Prenom $prenom = new Zend_Form_Element_Text("prenom", array('size' => 25)); $prenom ->setLabel('Votre prénom') ->addFilter('StringTrim') ->addValidator('NotEmpty'); //telMobile must be unique $telMobile = new Zend_Form_Element_Text('telMobile'); $telMobile->setLabel('Téléphone Mobile') ->addValidator('TelMobile') ->addValidator('NotEmpty'); //Pays $pays = new Zend_Form_Element_Select('pays'); $tabpays=array('France'=>'France','Belgique'=>'Belgique'); $pays->setMultiOptions($tabpays); $pays->setLabel('Pays') ->addValidator('NotEmpty'); $this->setDecorators( array( array('ViewScript', array('viewScript' => 'compte/registerform.phtml')))); $this->addElements(array($login,$email, $password, $repassword,$nom,$prenom,$telMobile,$pays)); } public function isValid($value) { $this->_setValue((string) $value); if ($value !== $this->_compare) { $this->_error(self::PASSWORD_MISMATCH); return false; } return true; } }
Mon fichier registerFrom.phtml
<form action="<?php $this->escape($this->element->getAction()) ?>" method="<?php $this->escape($this->element->getMethod()) ?>" id="myform"> <fieldset> <legend><?php echo $this->translate('Créer un compte gratuitement'); ?></legend> <ul class="formRegister"> <?php foreach($this->element as $element): ?> <li> <span> <?php echo $this->formLabel($element->getName(),$element->getLabel()) ?> <?php echo $element->renderDescription() ?> </span> <?php if($element->getName() == "recaptcha"): ?> <?php echo $element->render();?> <?php else:?> <?php echo $this->{$element->helper}( $element->getName(), $element->getValue(), $element->getAttribs(), (method_exists($element,'getMultiOptions')) ? $element->getMultiOptions() : '' ) ?> <?php endif;?> <?php echo $this->formErrors($element->getMessages()) ?> </li> <?php endforeach; ?> </ul> <p><input type="submit" id='submit' value="<?php echo $this->translate('Register'); ?>" /></p> </fieldset> </form>
En l'action de mon controller
function registerAction() { $this->view->selectedIndex = ""; $this->view->selectedCompte = ""; $this->view->selectedInscription = "current"; $this->view->selectedAbout = ""; $this->view->selectedFAQ = ""; $this->view->form = $form = new Appli_Form_Register; if($post = $this->getRequest()->isPost()){ $formData = $this->getRequest()->getPost(); if($form->isValid($formData)){ // Traitement $this->view->title = " Création d'un compte blabla"; }else{ $this->view->title = " Création d'un compte sanchez dos santos"; $form->populate($formData); } } else { $this->view->title = "$this->getRequest() // $this->getRequest()->isPost()"; }
Dernière modification par Mr.MoOx (30-12-2009 15:37:57)
Hors ligne
Ce test est pas terrible...
if($post = $this->getRequest()->isPost()){
Une affectation a tendance a souvent renvoyer true...
Moi je fais souvent comme ça
if($this->getRequest()->isPost() and $form->isValid($this->getRequest()->getPost())){
Hors ligne
ce n'est pas au test mais à la constructuion
j'ai lu en diagonale
mais je n'ai pas vu que tu passait ton formulaire en post
A+JYT
Hors ligne
Merci pour ta réponse.
J'ai eu la même idée... j'ai donc changé le code pour uniqueent tester la request. Je veux pas effectué en même temps le test de validation. En fait ca me permet de vérifier notamment que ca marche.
Avec le code actuel, je devrais pouvoir avoir un titre différent en fonction du moment (formulaire envoyé ou non)
f($this->getRequest()->isPost()){ $formData = $this->getRequest()->getPost(); if($form->isValid($formData)){ // Traitement $this->view->title = " Création d'un compte blabla"; }else{ $this->view->title = " Création d'un compte sanchez dos santos"; $form->populate($formData); } } else { $this->view->title = "ca marche pas du tout du tout"; }
mais toujours rien.. ca marche pas...
Hors ligne
sekaijin a écrit:
ce n'est pas au test mais à la constructuion
j'ai lu en diagonale
mais je n'ai pas vu que tu passait ton formulaire en post
A+JYT
Sauf erreur de ma part, c'est fait dans mon fichier registerform.phtml
<form action="<?php $this->escape($this->element->getAction()) ?>" method="<?php $this->escape($this->element->getMethod()) ?>" id="myform"> <fieldset> <legend><?php echo $this->translate('Créer un compte gratuitement'); ?></legend>
J'ai fait un echo sur la méthode et je suis bien en post... par contre action est vide (ce qui doit renvoyer sur la même page non??)
Je viens de fqire un essai en ajoutant la méthode lors de la création du formulaire et c'est toujours pas mieux...
$this->view->form = $form = new Appli_Form_Register; $form -> setMethod('post');
Dernière modification par mymt (30-12-2009 16:11:22)
Hors ligne
Ca dépends des navigateurs, je te conseille par expérience (mauvaise) de toujours fournir une action, même si tu dois utiliser la request_uri
Hors ligne
Mr.MoOx a écrit:
Ca dépends des navigateurs, je te conseille par expérience (mauvaise) de toujours fournir une action, même si tu dois utiliser la request_uri
Je viens de faire le test que tu proposes... et c'est toujours pas ça... je suis deg'!
Normalement, si mon URL contient toutes les variables du formulaire... c'est qu'il est bien passé ce foutu formulaire non??
Hors ligne
oups... benh là je comprends non plus pourquois ca passe en GET....
J'ai pourtant spécifier post au niveau de la method...
Est-ce qu'il vaut mieux forcer la méthode dès le fichier PHP qui décrit le formulaire??
Hors ligne
C'est au niveau du client que se fait le choix. Si ton form contient method="post" y'a pas de raison. N'y a-t-il pas un javascript qui ferait sa loi ?
Hors ligne
Et bien je crois pas... mise à part mon menu qui utilise javascrit et JQuery, j'ai pas de JAVA sur la page...
Bon j'ai mis en dur la méthode, et cette fois ci j'ai un message d'erreur de barbare du framwork.
exception 'Zend_Form_Exception' with message 'Method _setValue does not exist'
Il faut que je vois d'ou ça vient...
Désolé pour cette boulette de base, mais je débute avec Zend et mon PHP n'est plus tout jeune
Hors ligne
Montre nous le code html généré...
je ne crois pas qu'il est nécessaire d'utiliser $this->escape() sur tous tes "echo".
Tu peux aussi essayé le rendu automatique du formulaire pour voir si ça fonctionne:
registerFrom.phtml
echo $this->form;
Hors ligne
résolu... ne me demander pas trop comment car c'étiat pas clair pour moi. J'ai codé le submit de façon différente et ça a marché.. dur dur l'apprentissage de zend!
merci pour votre aide à tous.
Hors ligne
Pages: 1