Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Mon soucis actuellement est que j'ai un formulaire écrit en html/jquery parce que j'ai besoin d'une vérification coté client, je remplit mon formulaire coté controller avec du jquery mais je ne trouve pas ça propre
Voici mon code pour plus de compréhension:
controller
//Instanciation du formulaire utilisateur $formUser = new Application_Form_User(); //Instanciation du model typeUtilisateur pour récupérer les types d'utilisateurs qu'on va insérer dans //le select de notre formulaire user $tableTypeUtilisateur = new Application_Model_DbTable_TypeUtilisateur(); $dataTypeUtilisateur = $tableTypeUtilisateur->fetchAll(); //Remplissage de notre select via le resultat de la requete fetchAll foreach($dataTypeUtilisateur as $ligneUtilisateur) { ?> <script type="text/javascript"> $('#type').append("<option value=\"<?php echo $ligneUtilisateur['id_tu'];?>\"><?php echo ligneUtilisateur['tu_nom'];?></option>"); </script> <?php }
j'aimerais pouvoir mettre le foreach dans la vue de l'action, en lui envoyant le tab $dataTypeUtilisateur
Donc je fais un
$this->view->dataTypeUtilisateur = $dataTypeUtilisateur
et je fais mon foreach dans la vue en changeant le $dataTypeUtilisateur par un $this->dataTypeUtilisateur
le problème c'est que cela s'éxécute avant que le formulaire soit affiché, je peux voir via firebug que l'exécution de la boucle foreach est faite dans le vide(avec les bonnes informations donc le tableau est ok).
Comment je peux faire pour exécuter ce bout de code après l'affichage de mon formulaire tout en le laissant dans la vue.
Je répète que dans le controller ce morceau de code fonctionne, j'ai bien mon form avec mon select et ses option.
Je sais que c'est liée a une exécution serveur/client mais je ne trouve pas de solution répondant a mon problème.
merci de votre aide
Dernière modification par Zackfr64 (08-02-2011 16:39:44)
Hors ligne
bonjour,
$formUser->populate(
array(
'xxx' => $dataTypeUtilisateur
)
);
- remplacer 'xxx' par la valeur de l'attribut "name" de ton select dont l'id est #type (c'est peut-être 'type' aussi d'ailleurs ?)
- $dataTypeUtilisateur doit être un tableau associatif : les clés se retrouveront dans l'attribut "value" des options du select, et les valeurs se retrouveront comme libellés.
Hors ligne
ça devrait marcher mais le probleme c'est que j'utilise pas zend_form, j'ai fait mon formulaire en html et jquery pour avoir une validation coté client, et populate est propre a zend_form (enfin d'apres mes recherches)
Je pensais a une autre méthode du coup, passer en parametre a mon constructeur de formulaire le tableau ($dataTypeUtilisateur) et remplir mon select, ce qui fait qu'a son instanciation il est préremplit.
J'ai pas besoin de le faire dans le controller, et plus dans la vue du coup.
Hors ligne
donc j'ai surcharger mon _construct de mon formulaire
public function __construct($dataTypeUtilisateur,$action,$dataUser)
du coup je remplir mon formulaire a sa création
pour l'action par exemple
<form name="formUser" id="formUser" class="formular" method="post" action="<?php echo $action;?>">
c'est pratique car j'utilisais le formulaire utilisateur pour deux actions: ajouter et modifier
pour ajouter: mon formulaire était vide, mais le select remplit et l'action renvoyé vers ajouter
pour modifier: mon formulaire était remplit des infos de l'utilisateur, le select remplit et l'action renvoyé vers modifier/id/valeur
donc en gros voila comment je déclare mes form suivant l'un ou l'autre cas
ajouter
$formAjoutUt = new Application_Form_User($dataTypeUtilisateur, $action, 0);
modifier
$formAjoutUt = new Application_Form_User($dataTypeUtilisateur, $action, $dataUser);
meme pas besoin de vérifier que $dataUser est a 0 pour laisser les champs vide, je fais des value="<?php echo $dataUser['ut_nom'];?>" et cela ne m'affiche rien du coup (par contre je pensais que ça générerait des erreurs dans apache mais rien du tout).
La ou avant j'avais des dizaines de lignes dans mes action "ajouter" et "modifier" pour mettre a jour les champs, l'action etc... ben maintenant j'ai juste des paramètres a la création de mon formulaire.
voici le code complet de mon formulaire pour ceux que ça interesse
public function __construct($dataTypeUtilisateur,$action,$dataUser) { ?> <form name="formUser" id="formUser" class="formular" method="post" action="<?php echo $action;?>"> <fieldset> <legend>Utilisateur</legend> <label> <span>Login : </span> <input class="validate[required,custom[noSpecialCaracters],length[0,50]]" type="text" name="login" id="login" value="<?php echo $dataUser['ut_login'];?>"/> </label> <label> <span>Mot de passe : </span> <input class="validate[required,length[0,50]]" type="password" name="mdp" id="mdp" <?php if($dataUser){echo "disabled";} ?> value="<?php echo $dataUser['ut_mdp'];?>"/> </label> <label> <span>Confirmation Mot de passe : </span> <input class="validate[required,confirm['#mdp'],length[0,50]]" type="password" name="conf_mdp" id="conf_mdp" <?php if($dataUser){echo "disabled";} ?> value="<?php echo $dataUser['ut_mdp'];?>"/> </label> <label> <span>Nom : </span> <input class="validate[custom[onlyLetter],length[0,50]]" type="text" name="nom" id="nom" value="<?php echo $dataUser['ut_nom'];?>"/> </label> <label> <span>Prenom : </span> <input class="validate[custom[onlyLetter],length[0,50]]" type="text" name="prenom" id="prenom" value="<?php echo $dataUser['ut_prenom'];?>"/> </label> <label> <span>Email : </span> <input class="validate[custom[email],length[0,50]]" type="text" name="email" id="email" value="<?php echo $dataUser['ut_email'];?>"/> </label> <label > <span>Type utilisateur : </span><br/> <select name="type" id="type"> <?php foreach($dataTypeUtilisateur as $ligneUtilisateur) { echo "<option value='".$ligneUtilisateur['id_tu']."'>".$ligneUtilisateur['tu_nom']."</option>"; }?> </select><br/><br/> </label> <label> <span>Actif : </span><br/> <input type="checkbox" name="actif" id="actif" <?php if($dataUser['ut_actif']=="yes"){echo "checked";} ?>/> </label> </fieldset> <p><input class="submit" type="submit" value="Enregistrer" /></p> </form> <?php }
Dernière modification par Zackfr64 (09-02-2011 10:21:35)
Hors ligne
Pages: 1