Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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/07/2011, 09h55   #1
Invité régulier
 
Inscription : septembre 2010
Messages : 34
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 34
Points : 8
Points : 8
Par défaut PHP bean et DAO

Bonjour,

Pour un projet j'ai mis en place une archi MVC avec des DAO. Au passage je viens du java J2EE donc si une telle archi n'a pas sa place en PHP merci de me le dire ;-)).

J'ai un agent qui est dans un site (agence si vous préférez).
J'en ai déduis le bean AGENT (version simplifiée):
Code :
1
2
3
4
5
6
7
8
9
 
class Agent{
        public $id;
	public $site;
 
	/* setters */
 
	/* getters */
}
et le bean SITE :
Code :
1
2
3
4
5
6
7
8
class Site{
 
	public $id;
	public $nom;
 
	/* setters */
	/* getters */
}
Voici mon AgentDAO :
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
class AgentDAO{
 
	public $conn;
	public $siteDAO;
 
	function __construct() {
		$this->conn = SingletonConnexion::getInstance();
		$this->siteDAO = new SiteDAO();
    }
 
   public function getAgentParCodeAgent($codeAgent){
		$stmt = $this->conn->prepare("SELECT * FROM agent WHERE code_agent LIKE :codeAgent");
		$stmt->bindParam(":codeAgent",$codeAgent);
		$stmt->execute();
		$_agent = $stmt->fetch();
 
		$agent = $this->initAgent($_agent);
		return $agent;
	}
 
	private function initAgent($_agent){
		$agent = new Agent();
		$agent->setId($_agent["id_agent"]);		
		$agent->setCode($_agent["code_agent"]);		
		$agent->setSexe($_agent["sexe_agent"]);		
		$agent->setPrenom($_agent["prenom_agent"]);		
		$agent->setNom($_agent["nom_agent"]);		
		$agent->setNumero($_agent["numero_agent"]);		
		$agent->setOrdre($_agent["ordre_agent"]);		
		$agent->setRue($_agent["rue_agent"]);		
		$agent->setComplement($_agent["complement_adresse_agent"]);		
		$agent->setCp($_agent["cp_agent"]);		
		$agent->setCommune($_agent["commune_agent"]);		
		$agent->setDtnais($_agent["date_naissance_agent"]);		
		$agent->setEmail($_agent["email_agent"]);		
		$agent->setDateEntree($_agent["date_entree_agent"]);		
		$agent->setDatePermisConduire($_agent["date_permis_conduire_agent"]);	
		echo $_agent["site_agent"];
		$agent->setSite($this->siteDAO->getSiteParIdSite($_agent["site_agent"]);	
		return $agent;
	}
 
	public function __destruct(){}
 
}
et mon SiteDAO :
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
class SiteDAO{
 
	public $conn;
 
	function __construct() {
		$this->conn = SingletonConnexion::getInstance();
    }
 
	public function getSiteParIdSite($idSite){
 
		$stmt = $this->conn->prepare("SELECT * FROM site WHERE id_site = :idSite");
		$stmt->bindParam(":idSite",$idSite);
		$stmt->execute();
		$_site = $stmt->fetch();
 
		$site = new Site();
		$site->setId($_site["id_site"]);
		$site->setNom($_site["nom_site"]);
		print_r($site);
		/**/
		return $site;
 
	}
 
	public function __destruct(){}
 
}
Problème, quand je fais un getAgentParCodeAgent, tout passe juqu'à l'accès à siteDAO (quand le met à jour la variable $site de l'agent). Je l'ai affichée mais elle est vide (j'ai l'impression qu'il ne l'instancie pas).

Merci d'avance
maxwell374 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 10h49   #2
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 776
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 776
Points : 2 340
Points : 2 340
Bonjour,

Tu pourrais mettre le code où tu appelles les méthodes ?
FirePrawn est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h09   #3
Invité régulier
 
Inscription : septembre 2010
Messages : 34
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 34
Points : 8
Points : 8
Ma page d'appel :
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
<?php
session_start();
include_once("../../../_controleur/AgentControleur.php");
include_once("../../../_modele/dao/AgentDAO.php");
include_once("../../../_controleur/SiteControleur.php");
include_once("../../../_modele/dao/SiteDAO.php");
include_once("../../../_modele/bean/Agent.php");
include_once("../../../_modele/bean/Site.php");
include_once("../../../Outils/BaseDeDonnees/objet/SingletonConnexion.php");
 
$_agent = new AgentControleur();
?>
<html>
<title>test</title>
</head>
<body>
 
<?php
$codeAgent = "2881";
$agent = $_agent->getAgentParCodeAgent($codeAgent);
echo $agent->getNom()."<br/>"."<br/>";
?>
</body>
</html>
Mes controleurs ne font rien de particulier (pour l'instant), ils appellent juste mes DAO.

Merci
maxwell374 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h15   #4
Invité régulier
 
Inscription : septembre 2010
Messages : 34
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 34
Points : 8
Points : 8
Euh je pense avoir fait une boulette qqpart car avec ce code :
Code :
1
2
3
 
$site = $this->siteDAO->getSiteParIdSite($_agent["site_agent"]);
$agent->setSite($site);
à la place de celui ci :
Code :
1
2
 
$agent->setSite($this->siteDAO->getSiteParSite($_agent["site_agent"]);
ça marche !

Quelqu'un saurait me dire pourquoi?
maxwell374 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h20   #5
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Citation:
Envoyé par maxwell374 Voir le message
Code :
1
2
 
$agent->setSite($this->siteDAO->getSiteParSite($_agent["site_agent"]);
Il manque une parenthèse fermante.
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 11h38   #6
Invité régulier
 
Inscription : septembre 2010
Messages : 34
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 34
Points : 8
Points : 8
Ok je sors !
maxwell374 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 10h35   #7
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
hello,

Dans AgentDAO::getAgentParCodeAgent

Code :
1
2
3
4
5
6
7
8
9
   public function getAgentParCodeAgent($codeAgent){
		$stmt = $this->conn->prepare("SELECT * FROM agent WHERE code_agent LIKE :codeAgent");
		$stmt->bindParam(":codeAgent",$codeAgent);
		$stmt->execute();
		$_agent = $stmt->fetch();
 
		$agent = $this->initAgent($_agent);
		return $agent;
	}
Tu ne vérifies pas que ton $stmt->fetch est différent de false.
Donc en fait, sa peux amener à créer un agent vide.

Dans Agent,
Tu ne nous donne pas le code de Agent::getNom et Agent::setNom. Je sais, ses méthodes sont triviales mais pour déterminer le dysfonctionnement de ton programme, il en faut toutes les pièces..

Déjà des débuts de piste.

Autrement, je trouve ton code extrêmement lourd et compliqué !!!!!
Il n'y à qu'à voir, dès la première requête tu te galères... Et c'est compréhensible.

Pourquoi ne pas te tourner vers un outil dédié à cela ?
Tels que par exemple Doctrine 1/2 (j'en suis pas fan, mais sa fera le boulot : ), ou bien RedBean (je préfère) accompagné de DomainObject.
Ou n'importe quoi d'autre qui te conviendra plus !!


a+
kaymak 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 15h10.


 
 
 
 
Partenaires

Hébergement Web