Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks
Bibliothèques et frameworks Forum d'entraide sur les frameworks, templates, bibliothèques de code (PDFLib, eZPdf, JpGraph, Artichow, PEAR, etc). Avant de poster : FAQ bibliothèques, toutes les FAQ PHP et cours bibliothèques
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 09/07/2007, 16h35   #1
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Par défaut [WACT] Un contrôleur pour plusieurs formulaires

Bonjour,

Je suis actuellement en stage et je découvre WACT. J'ai encore un peu de mal à me faire à l'architecture MVC.

Je voulais savoir si c'est possible d'avoir un seul controller pour plusieurs formulaires différents?

Si oui comment faire svp.

Merci d'avance à tous ceux qui participeront à ce thread
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 22h55   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
je ne connais pas spécialement WACT mais en POO une des règles est de ne pas répéter du code identique à plusieurs endroits. donc si les formulaires se ressemblent il est possible d'avoir un seul contrôleur pour plusieurs formulaire mais sinon il n'y a pas de problème à avoir un contrôleur par page
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 11h13   #3
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Ok ok, je croyais que le fait d'ajouter plusieurs controleurs rendrait le code lour et les temps d'exécution plus long par la même occasion.

J'ai un petit soucis, j'ai un premier formulaire, il y a deux boutons, un pour le valider, l'autre qui mène à un second formulaire avec lui aussi 2 boutons, un pour valider, l'autre pour annuler.

Sur le second formulaire quand je clique sur Valider, mes controles sur les champs ne sont pas pris en compte et je reviens directement au premier formulaire.

Je ne comprends pas cette erreur car le code est à peu près identique à celui du premier formulmaire qui lui fonctionne parfaitement.

Si idéalement quelqu'un qui connait WACT pourrait m'aider ou alors quelqu'un qui est suceptible de me mettre sur la voie.

Merci d'avance et ausssi merci à toi Mathieu, si t'as une idée, elle est la bienvenue
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 11h57   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par lvldia
Ok ok, je croyais que le fait d'ajouter plusieurs controleurs rendrait le code lour et les temps d'exécution plus long par la même occasion.
même s'il y a plusieurs contrôleurs, seul un seul est chargé par page donc ça ne change pas beaucoup la charge

pour ton problème, montre nous un exemple de code
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2007, 12h47   #5
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
Controller pour le premier formulaire

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 
 
<?php
require_once WACT_ROOT . 'controller/controller.inc.php';
require_once WACT_ROOT . 'controller/form.inc.php';
 
require_once MODELS_ROOT . 'CommonModel.php';
require_once MODELS_ROOT . 'CommonModelGen.php';
require_once VIEWS_ROOT . "IndexView.php";
require_once VIEWS_ROOT . "FormExtendedView.php";
require_once VIEWS_ROOT . "ExtendedView.php";
 
require_once CLASSES_ROOT . "Translation.php";
 
 
class NumComm extends PageController {
 
 
	function __construct() {
    	parent::__construct();
 
    	//ajout du formulaire
	    $Form = new FormController();
	    $this->addChild('formNumm', $Form);
	    $Form->registerOnLoadListener(new Delegate($this, 'load'));
		$this->setDefaultChild('formNumm');    
 
		//Bouton permettant de valider les infos et vérifier le Numéro Philips
	    $Form->addChild('valider_coord',  new ButtonController(new Delegate($this, 'verif')));
	    //Bouton permettant de modifier les informations clients
	    $Form->addChild('modif_coord',  new ButtonController(new Delegate($this, 'modif')));
 
 
	    //Vue par défaut
 
		$this->addView('modif', new Handle(VIEWS_ROOT . 'formModifView.php|formModif', array('/formModifCoord.html')));
	    $this->setDefaultView(new Handle(VIEWS_ROOT . 'FormEnlevView.php|FormEnlev',array('/formDemandEnlev3.html')));
 
 
	}
 
    function load(&$Source, &$request, &$responseModel) {
    	if (!SessionManager::get("isLogin")){
			header("Location: localhost");
    	}else{
    		$responseModel->set("aide",true);
    	}
    }
    function verif(&$Source, &$request, &$responseModel) {
    	if (!SessionManager::get("isLogin")){
			header("Location: localhost");
    	}else{
    		//vérification de la validité du numéro commercial
    		$Num=$responseModel->get("numcomm");
    		$Num2=substr($Num,0,2);
  			$Num3=substr($Num,0,1);
  			if($Num==""){
  				$responseModel->set("erreur",true);
  			}else{
 
    			if(($Num2!=01 and $Num2!=20 and $Num2!=2 ) or ($Num2==01 and strlen($Num)!=8 ) or  ($Num2==20  and strlen($Num)!=7 ) or ($Num3==2  and strlen($Num)!=7 )){
   					$responseModel->set("erreur2",true);
    			}else{
    				echo "OK!";
    			}
  			}
    	}
    }
    function modif(&$Source, &$request, &$responseModel){
  	    if (!SessionManager::get("isLogin")){
			header("Location: localhost");
    	}else{
    		return 'modif';
 
    	}
    }
 
}
 
?>
Et voici celui du second

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
 
 
<?php
require_once WACT_ROOT . 'controller/controller.inc.php';
require_once WACT_ROOT . 'controller/form.inc.php';
 
 
 
 
 
require_once MODELS_ROOT . 'CommonModel.php';
require_once MODELS_ROOT . 'CommonModelGen.php';
require_once VIEWS_ROOT . "IndexView.php";
require_once VIEWS_ROOT . "FormExtendedView.php";
require_once VIEWS_ROOT . "ExtendedView.php";
 
require_once CLASSES_ROOT . "Translation.php";
 
class CoordCli extends PageController {
 
	function __construct() {
    	parent::__construct();
 
    	//ajout du formulaire
	    $Form = new FormController();
	    $this->addChild('formAdresse', $Form);
	    $Form->registerOnLoadListener(new Delegate($this, 'load'));
	    //$Form->OnPostBack(new delegate($this,'validmodif'));
		$this->setDefaultChild('formAdresse');    
 
		//Bouton permettant de valider les modifications des infos clients après vérification des champs 
	    $Form->addChild('valid_modif', new ButtonController(new Delegate($this, 'validmodif')));
	    //Bouton permettant d'annuler les modifications
	    $Form->addChild('annul_modif', new ButtonController(new Delegate($this, 'annulmodif')));
 
 
	    //Vue par défaut
	    $this->setDefaultView(new Handle(VIEWS_ROOT . 'formModifView.php|FormModif',array('/formModifCoord.html')));
 
	}
 
    function load(&$Source, &$request, &$responseModel) {
    	if (!SessionManager::get("isLogin")){
			header("Location: localhost");
    	}else{
    		$responseModel->Set("aide",true);
    	}
 
    }
 
    function validmodif(&$Source, &$request, &$responseModel){
				echo "TEST";
    	if (!SessionManager::get("isLogin")){
			header("Location: localhost");
    	}else{	
 
    		$idclient=SessionManager::get("IDCLIENT");
    		$nom=$responseModel->get("nom");
    		$societe=$responseModel->get("societe");
    		$email=$responseModel->get("mail");
    		$adr=$responseModel->get("adr");
    		$cp=$responseModel->get("cp");
    		$ville=$responseModel->get("ville");
    		$tel=$responseModel->get("tel");
    		$fax=$responseModel->get("fax");
    		$horaire=$responseModel->get("horaire");
    		$jfermeture=$responseModel->get("jfermeture");
 
			//vérification des champs du formulaire
			//Nom
			if($nom==""){
				$responseModel->set("erreurNom",true);
				$validNom=false;
				echo("Nom!");
			}else{
				$validNom=true;
			}
			//Societe
			if($societe==""){
				$responseModel->set("erreurSociete",true);
				$validSociete=false;
			}else{
				$validSociete=true;
			}	
			//Mail
			if($email==""){
				$responseModel->set("erreurMail1",true);
				$validMail=false;
			}else{
				if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$",$email)){
					$responseModel->set("erreurMail2",true);
					$validMail=false;
				}else{
					$validMail=true;
				}
			}	
			//Adresse
			if($adr==""){
				$responseModel->Set("erreurs",true);
				$responseModel->set("erreurAdr",true);
				$validAdr=false;
			}else{
				$validAdr=true;
			}
			//Code postal
			if($cp==""){
				$responseModel->set("erreurCp1",true);
				$validCp=false;
			}else{
				if(!number_format($cp) or strlen($cp)!=5){
					$responseModel->set("erreurCp2",true);
				}else{
					$validCp=true;
				}
			}
			//Ville
			if($ville==""){
				$responseModel->set("erreurVille",true);
				$validVille=false;
			}else{
				$validVille=true;
			}
			//Téléphone
			if($tel==""){
				$responseModel->set("erreurTel1",true);
				$validTel=false;
			}else{
				if(!number_format($tel) or strlen($tel!=10)){
					$responseModel->set("erreurTel2",true);
					$validTel=false;
				}else{
					$validTel=true;
				}
			}
			//Fax
			if($fax!=""){
				if(!number_format($fax) or strlen($fax)!=10){
					$responseModel->set("erreurFax",true);
					$validFax=false;
				}else{
					$validFax=true;
				}
			}else{
				$validFax=true;
			}
			//Horaire
			if($horaire==""){
				$responseModel->set("erreurHoraire",true);
				$validHoraire=false;
			}else{
				$validHoraire=true;
			}
			//Jfermeture
			if($jfermeture==""){
				$responseModel->set("erreurJfermeture",true);
				$validJfermeture=false;
			}else{
				$validJfermeture=true;
			}
 
			//Insertion dans la base de données si tous les champs sont corrects
			if($validNom==true and $validSociete==true and $validMail==true and $validAdr==true and $validCp==true and $validVille==true and $validTel==true and $validFax==true and $validHoraire==true and $validJfermeture==true){
    			CommonModel::validmodif($idclient,$nom,$societe,$email,$adr,$cp,$ville,$tel,$fax,$horaire,$jfermeture);
			}else{
				$responseModel->Set("erreurs",true);
				return;
			}
    	}
 
    }
 
        function annulmodif(&$Source, &$request, &$responseModel){
          if (!SessionManager::get("isLogin")){
			header("Location: localhost");
          }else{
          	header("Location: ../index.php/SavPhi");
          }
 
        }
 
}
 
?>
EDIT : Mon problème précis est le suivant : Je fais tout une batterie de test sur les champs de mon formulaire dans mon second controleur, mais ceux-ci ne sont pas exécutés. Et ceci tiens apparemment au fait que lorsque a partir de ma premiere page, quand je clique sur le bouton modifier qui m'amène vers le formulaire de modification, je charge bien la page du formulaire mais pas le controleur (donc cette page dépend toujours du premier controleur).

Je voudrais donc savoir comment faire pour sauter d'un controleur à un autre.

Merci
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2007, 15h48   #6
Invité régulier
 
Inscription : mai 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 46
Points : 7
Points : 7
A force de modifier, remodifier, re remodifier mon code j'ai réussi enfin à trouver une solution.

En fait je ne fonctionne qu'avec un seul controlleur et plussieurs formulaires, le tout est de donner le même nom a chaque formulaire et ça tourne impeccable.

Merci tout de même pour avoir essayer d'apporter une solution à mon problème
lvldia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h18.


 
 
 
 
Partenaires

Hébergement Web