IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Zend form + Ajax


Sujet :

Zend Framework PHP

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut Zend form + Ajax
    Bonjour a tous,

    Voila j'ai voulu faire évoluer mon site afin qui soit plus rapide dans ses temps de chargement en y incluant de l'ajax via jquery. Pour le chargement des pages sa ne pose aucun problème.

    Mais maintenant je veut faire en sorte que lorsque je fais une modification dans mes formulaires et que je click sur envoyer sa me recharge que l’endroit ou il y avait le formulaire et que bien sur sa modifie en base de données avec les éléments que j'ai mis dans mon formulaire.
    C'est la que sa pose problème . C'est que sans ajax tout fonctionne bien il y a pas de souci mes action de mise a jour fonctionne nickel ! Mais maintenant que j’intègre de l'ajax mon test de mon formulaire ne passe plus et du coup me renvoie mon formulaire comme si il y a avait une erreurs !

    J'ai bien compris que en ajax pour les formulaires il faut faire une sérialisation que l'on mais dans notre script jquery. Cela fonctionne et grâce a un Zend_Debug j'ai pu vérifier qu'il me récupérer bien mon $_POST. Mais du coup je perd tout les controlles des validateur et filtre que j'ai paramétrer dans mon formulaire. La question est comment je fais pour que tout fonctionne comme avant mais avec l'ajax en + ?

    Le controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public function updatememberAction() //action ou ce trouve mon formulaire
    {
        $this->_helper->layout->disableLayout(); //supprime le layout
     
        //... Fait mon appel a la base de données repeuple mon formulaire et l'envoie dans la vue => OK
    }
     
     public function updatedAction() //action qui mais a jour mon formulaire dans la BDD
    {
        $Form_Admin_User = $this->_getRegistrationForm();
     
        if($Form_Admin_User->isValid($_POST))
        {
                   //J'envoie dans la BDD les infos de mon formulaire
        }
        else {
                // je revient sur mon formulaire et affiche les erreurs.
        }
    }
     
    private function _getRegistrationForm() //methode privee qui parametre mon formulaire (action, decorateur ...)
    		{
    			$Form_Admin_User = new Form_Admin_User;
    			$Form_Admin_User->setDecorators(array(array('ViewScript', array('viewScript' => $this->_helper->viewRenderer->getViewScript('userFormDecorator')))));
    			return $Form_Admin_User->setAction($this->_helper->url->url(array('controller' => 'admin', 'action' => 'updaded', 'accountId' => $this->_getParam('accountId')), 'route_locale', true));
    		}
    Ma vue: updatemember.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <div class="encadre">
    		<div class="clearfix">
    			<div class="floatLeftForm2">
    				<div id="Form_Member_Update_<?php echo $this->param; ?>"><?php echo $this->Form_Member_Update;?></div>// Mon formulaire est ICI !!!!!
    			</div>
    			<div class="floatLeftForm2" style="margin-left: 5%;">
    				<?php echo $this->licence; ?>
    				<br />
    				<?php echo $this->password; ?>
    				<br />
    				<?php if($this->infoMembre['picture'] != 'Aucune'): ?>
    					<img src="/picture/controllers/account/avatar/<?php echo $this->infoMembre['picture'] ?>" style="width: 300px;margin: 5%"/>
    				<?php endif ?>
    				<?php if($this->infoMembre['picture'] === 'Aucune'): ?>
    					<img src="/picture/controllers/account/avatar/noavatar.png" style="width: 300px; margin: 5%"/>
    				<?php endif ?>
    			</div>
    		</div>
    	</div>
    <script type="text/javascript"> //Ma config ajax
    	$J(document).ready(function(){
     
     
    	 $J("form.Zend_Form").click(function() {
                 $J("#Form_Member_Update_<?php echo $this->param; ?>").empty().html('<img style="margin: 0 auto;" src="/picture/layout/ajax-loader2.gif" /><br />En cours de mise à jour');
    	     var datas = $J(this).serialize(); //recuperation des elements de mon formulaire.
    	     $J.ajax({
                       type:"POST",
                       url:$J(this).attr("action"),
    		   data: datas,
                       success: function(retour){
    			$J("#Form_Member_Update_<?php echo $this->param; ?>").empty().append(retour);
    			alert("Mise à jour effectué avec succés");
                       }
                   });
                   return false;
             });
          });
    </script>
    Merci a tous d'avance pour l'aide

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Quel Action est exécute par ajax??
    Si c'est updatemember alors la vérification et l'insertion doivent être dans cette action.
    Si non fais un print_r de ton $_POST

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut
    L'action va dans dans update. Sa me lance bien le script mais me retourne le formulaire comme si il y avait une erreur ! Ce qui est normale vu je lorsque je fais un Debug de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Form_Admin_User = $this->_getRegistrationForm();
    il me retourne un array vide
    donc il faut mettre dans le script dans data les valeurs que va prendre le POST.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print_r($_POST);exit;
    il faut qu'il t'affiche ton array dans le div
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="Form_Member_Update_<?php echo $this->param; ?>"><?php echo $this->Form_Member_Update;?></div>
    Pour vérifier les valeur envoyé par l'ajax.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut
    Il me retourne un Array ( ) vide !

    DSL

    C'est bon il me retourne toute mes valeur
    mes mon formulaire n'est toujours pas valide !

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut
    Pour infos j'ai resolue mon probleme il fallait que je passe comme test de mon formulaire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($Form_Admin_User->isValidPartial($_POST)) 
    au lieu de :
    if($Form_Admin_User->isValid($_POST))
    Si sa peut peut aider d'autre personne ! C'est apparement ce qu il faut utiliser quand on fais de l'ajax avec des formulaire sous zend !

  7. #7
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Cela est completement faut car la il suffit que tu ais a peine une chose de valide pour que ça soit bon donc le test est presque inutile

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 19
    Par défaut
    Le problème c'est que si je ne fais pas test le retour de mes valeur ne ce fais pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $datas = $form->getValues(); //il me retourne aucune valeur si je ne fais pas un test au préalable il me retourne un Array() vide
    Si il n'y as pas de test il me retourne toute mes valeurs du formulaire a NULL et lorsque je passe un isValidPartiel le test ce valide et la j’obtiens mes valeurs !

    Comment faire autrement alors ? car je ne connais pas d'autre moyen !

  9. #9
    Membre éprouvé Avatar de Alcide_
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 79
    Par défaut
    Comme le sous-entend 5h4rk, les méthodes "isValid()" et "isValidPartial()" n'ont pas le même but.
    Là où "isValid()" va effectuer une validation sur tous les champs de ton formulaire, "isValidPartial()" va effectuer la validation seulement sur les champs ayant une existence dans $_POST, donc si un champ n'existe pas dans $_POST il ne sera pas validé.

    Après si c'est cela ton but, pas de problème mais il ne faut pas oublier que seul "isValid()" vérifie inconditionnellement la totalité du formulaire.

    la doc sur la validation

    Il serait intéressant de voir les messages d'erreurs renvoyés par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Form_Admin_User->isValid($_POST)
    essaye un petit dump de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Form_Admin_User->getErrorMessages();
    après la validation, là tu seras fixé sur le(s) champ(s) qui bloque(nt).

  10. #10
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Je te rappel gogololo que tu peux récupérer un paramètre envoyer de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_request->getParam('ton parametre');
    directement dans ton action

    EDIT : j'ai corriger petite confusion avec du JEE

Discussions similaires

  1. [ZF 1.11] Zend form & Ajax pour des listes liée
    Par katsuya dans le forum Zend_Form
    Réponses: 0
    Dernier message: 05/11/2012, 10h59
  2. [Zend Form] Traduction des messages d'erreur
    Par Coyote Terrorist dans le forum Zend_Form
    Réponses: 8
    Dernier message: 01/08/2011, 19h33
  3. [Prototype] La meilleure Class de controle form AJAX/JS
    Par hugo69 dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 18/05/2009, 08h10
  4. Zend MVC + Ajax
    Par Reckonings dans le forum MVC
    Réponses: 3
    Dernier message: 06/08/2007, 16h36
  5. [AJAX] Zend et AJAX
    Par leroidje dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/07/2007, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo