Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > MVC
MVC Forum de support sur le développement d'applications de type modèle-vue-contrôleur avec Zend Framework ainsi que vos questions sur les plugins, les helpers etc. Avant de poster -> Cours MVC, FAQ ZF Controller
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 27/08/2007, 13h02   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut tuto MVC erreur : trying to get property of non object

bonjour tout le monde,
j'ai suivi le tutoriel d'initiation à l'approche MVC avec zend. Au début tout marche bien, l'exemple donné dans le tutoriel fonctionne correctement mais quand j'ai essayé de développer un autre exemple j'ai trouvé un probléme dans la partie modification: quand je clique sur modifier les champs de texte qui devrait être remplis en principe par les valeurs de l'enregistrement à modifier sont remplis par une erreur dans le fichier form.phtml :
trying to get property of non object on line X... est ce que quelqu'un pourrait m'aider à résoudre ce probléme? merci.
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 13h21   #2
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Peux-tu nous montrer la ligne ou se trouve l'erreur?
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 13h51   #3
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut la ligne du code qui declenche l'erreur

voici la ligne du code indiquée par l'erreur:
<input type="text" name="login"
value="<?php echo $this->escape($this->compte->login); ?>" />

j'ai une table compte constituée de deux champs(login,pass);
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 13h55   #4
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Est-ce que tu passe bien l'objet compte à la vue? Parce que d'après l'erreur tu accèdes à un propriété qui n'existe pas!

Avant de faire le render est-ce que tu fais bien:

Code :
$this->view->compte = $compte // model compte
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 14h06   #5
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut code de la fonction de modification

en fait je suis debutant je comprends pas ce que vous vouliez dire.
de toutes façons voici le code de la fonction de modification:
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
	function modifierAction(){
			//echo "<h1>dans compteController:modifierAction</h1>";
			$this->view->title = "Modifier un compte!!";
			$compte = new CompteGestion();
 
			if($this->_request->isPost()){
				Zend_Loader::loadClass('Zend_Filter_StripTags');
				$filter = new Zend_Filter_StripTags();
 
				$id = (int)$this->_request->getPost('idCompte');
				$login = $this->_request->getPost('login');
				$pass = $this->_request->getPost('pass');
				$login = trim($login);
				$pass = trim($pass);
 
				if($id !=false){
					if($login != '' && $pass != ''){
						$data = array('login'=>$login,'pass'=>$pass);
						$where = 'idCompte='.$id;
						$compte->update($data,$where);
						$this->_redirect('/compte');
						return;
					}
					else{
						$this->view->compte = $compte->fetchRow('idCompte='.$id);
					}
				}
			}
			else{
				$id = (int)$this->_request->getParam('idCompte',0);
				if($id>0){
					$this->view->compte = $compte->fetchRow('idCompte='.$id);
				}
			}
 
			$this->view->action = 'modifier';
			$this->view->buttonText = 'Mettre a jour';
			//$this->render();
	}
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 14h21   #6
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Peux-tu me donner le lien vers le tutoriel que tu as suivis? Car le code m'a l'air assez correct. Est-tu sûr du nom des champs?
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 14h26   #7
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut voici le lien du tuto

oui je suis sur des noms des champs.
voici le lien vers les tuto:
http://g-rossolini.developpez.com/tu...ework/debuter/
je vous remercie bcp pour votre aide.
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 14h38   #8
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Apparemment tu as changé le model étant donné que dans le tutoriel il s'agit d'Album et non pas de CompteGestion!

Par contre j'ai repéré une erreur, peut-être une erreur de copie.

Hors dans ton code:

Essaye d'ajouter un égal.

PS: Utilise la balise CODE quand tu poste du code sur le forum. Pour ceci surligne ton code et clique sur le petit icône # en haut de l'éditeur.
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h02   #9
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut le code est correct

en fait même si j'ajoute le '=' ça ne marche pas.
j'ai réalisé l'exemple du tuto et tout marche bien mais quand j'ai essayé de développer mon propre exemple c'est là que ça bloque.
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h23   #10
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Bon ce qui est sûr c'est que dans ton objet compte que tu passes à la vue il n'y a pas la propriété souhaitée. Tu peux nous montrer la structure de la table ainsi que la classe de model CompteGestion ?
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/08/2007, 15h29   #11
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut ok voici les codes

la table est:compte_intranet(idCompte,login,pass)
mon model est:
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
<?php
class CompteController extends Zend_Controller_Action{
 
	function init(){
		$this->view->baseUrl = $this->_request->getBaseUrl();
		Zend_Loader::loadClass('compteGestion');
	}
 
	function indexAction(){
			//echo "<h1>dans compteController:indexAction</h1>";
			$this->view->title = "liste des comptes!!";
			$compte = new CompteGestion();
			$this->view->comptes = $compte->fetchAll();
			//$this->render();
	}
 
	function ajouterAction(){
			//echo "<h1>dans compteController:ajouterAction</h1>";
			$this->view->title = "Ajouter compte!!";
			if($this->_request->isPost()){
				Zend_Loader::loadClass('Zend_Filter_StripTags');
				$filter = new Zend_Filter_StripTags();
				$login = $filter->filter($this->_request->getPost('login'));
				$login = trim($login);
				$pass = $filter->filter($this->_request->getPost('pass'));
				$pass = trim($pass);
 
				if($login !='' && $pass !=''){
					$data = array( 'login'=>$login, 'pass' =>$pass);
					$compte = new CompteGestion();
					$compte->insert($data);
					$this->_redirect('/compte');
					return;
				}
			}
 
			$this->view->compte = new stdClass();
			$this->view->compte->idCompte = null;
			$this->view->compte->login = '';
			$this->view->compte->pass = '';
 
			$this->view->action = 'ajouter';
			$this->view->buttonText = 'Ajouter';
 
			//$this->render();
	}
 
	function modifierAction(){
			//echo "<h1>dans compteController:modifierAction</h1>";
			$this->view->title = "Modifier un compte!!";
			$compte = new CompteGestion();
 
			if($this->_request->isPost()){
				Zend_Loader::loadClass('Zend_Filter_StripTags');
				$filter = new Zend_Filter_StripTags();
 
				$id = (int)$this->_request->getPost('idCompte');
				$login = $this->_request->getPost('login');
				$pass = $this->_request->getPost('pass');
				$login = trim($login);
				$pass = trim($pass);
 
				if($id !== false){
					if($login != '' && $pass != ''){
						$data = array('login'=>$login,'pass'=>$pass);
						$where = 'idCompte='.$id;
						$compte->update($data,$where);
						$this->_redirect('/compte');
						return;
					}
					else{
						$this->view->compte = $compte->fetchRow('idCompte='.$id);
					}
				}
			}
			else{
				$id = (int)$this->_request->getParam('idCompte',0);
				if($id>0){
					$this->view->compte = $compte->fetchRow('idCompte='.$id);
				}
			}
 
			$this->view->action = 'modifier';
			$this->view->buttonText = 'Mettre a jour';
			//$this->render();
	}
 
	function supprimerAction(){
			$this->view->title = "Supprimer un compte!!";
			$compte = new CompteGestion();
 
			if($this->_request->isPost()){
				Zend_Loader::loadClass('Zend_Filter_Alpha');
				$filter = new Zend_Filter_Alpha();
				$id = (int)$this->_request->getPost('idCompte');
				$del = $filter->filter($this->_request->getPost('del'));
 
				if( $del == 'oui' && $id > 0){
					$where = 'idCompte='.$id;
					$rows_affected = $compte->delete($where);
				}
			}
 
			else{
				$id = (int) $this->_request->getParam('idCompte');
				if($id > 0){
					$this->view->compte = $compte->fetchRow('idCompte = '.$id);
 
					if($this->view->compte->idCompte > 0){
						return;					
					}
				}
			}
			$this->_redirect('/compte');
	}
}
?>
dsl il y a bcp de code
h_ismaili est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2007, 12h06   #12
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 73
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 73
Points : 26
Points : 26
Par défaut l'erreur residait dans index.phtml

bonjour
je remercie vivement yoteco pour son aide et pour le temps qu'il a consacré pour résoudre mon probleme.
en fait le probleme était dans la récupération de l'id au niveau de getParam...
la page d'index envoyait un parametre appelé id et moi je récupérais un idCompte, du coup la valeur retournée est celle par défaut càd 0, quand le modéle essayait de récupèrer l'enregistrement d'id 0 il ne le trouvait pas et c'est cela qui déclenche l'erreur.
h_ismaili 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 11h14.


 
 
 
 
Partenaires

Hébergement Web