Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
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 26/08/2011, 17h13   #1
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2007
Messages : 17
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 : 17
Points : 1
Points : 1
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 :
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 :
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
gogololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 17h38   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 461
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 461
Points : 645
Points : 645
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
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 17h51   #3
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2007
Messages : 17
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 : 17
Points : 1
Points : 1
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 :
$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.
gogololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 17h59   #4
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 461
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 461
Points : 645
Points : 645
Un
Code :
1
2
 
print_r($_POST);exit;
il faut qu'il t'affiche ton array dans le div
Code :
<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.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 18h24   #5
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2007
Messages : 17
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 : 17
Points : 1
Points : 1
Il me retourne un Array ( ) vide !

DSL

C'est bon il me retourne toute mes valeur
mes mon formulaire n'est toujours pas valide !
gogololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 02h02   #6
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2007
Messages : 17
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 : 17
Points : 1
Points : 1
Pour infos j'ai resolue mon probleme il fallait que je passe comme test de mon formulaire ceci :

Code :
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 !
gogololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2011, 10h01   #7
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
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
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 11h11   #8
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2007
Messages : 17
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 : 17
Points : 1
Points : 1
Le problème c'est que si je ne fais pas test le retour de mes valeur ne ce fais pas !

Code :
$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 !
gogololo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 12h56   #9
Membre régulier
 
Avatar de Alcide_
 
Homme
Étudiant
Inscription : juin 2008
Messages : 70
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 70
Points : 78
Points : 78
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 :
$Form_Admin_User->isValid($_POST)
essaye un petit dump de
Code :
$Form_Admin_User->getErrorMessages();
après la validation, là tu seras fixé sur le(s) champ(s) qui bloque(nt).
Alcide_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 13h14   #10
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

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

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Je te rappel gogololo que tu peux récupérer un paramètre envoyer de la façon suivante :

Code :
$this->_request->getParam('ton parametre');
directement dans ton action

EDIT : j'ai corriger petite confusion avec du JEE
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h15.


 
 
 
 
Partenaires

Hébergement Web