Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 17/05/2011, 20h21   #1
Débutant
 
Avatar de ETVigan
 
Homme Esteban
Conseil - Consultant en systèmes d'information
Inscription : avril 2010
Messages : 632
Détails du profil
Informations personnelles :
Nom : Homme Esteban
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Finance

Informations forums :
Inscription : avril 2010
Messages : 632
Points : 122
Points : 122
Envoyer un message via MSN à ETVigan Envoyer un message via Skype™ à ETVigan
Par défaut Que signifie return(new $class($this));

Si vous vous référez au tuto => http://julien-pauli.developpez.com/t...vc-controleur/ sur le modèle: sur MVC et particulièrement à la méthode GetCommand du Controller

Vous trouverez entre autre la classe:

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
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . "/class/request.php") ; 
require_once ($_SERVER['DOCUMENT_ROOT'] . "/class/response.php") ; 
 
class FrontController
{	private $_defaults = array('module' => 'index', 'action' => 'index');
	private $_request;
	private $_response;
	private static $_instance = null;

	private function __construct()
	{
		$this->_request  = new Request();
		$this->_response = new Response();
	}

	public static function getInstance()
	{	if (is_null(self::$_instance))
			self::$_instance = new self();
		return self::$_instance;
	}

	public function dispatch($defaults = null)
	{	$parsed = $this->_request->route();
		$parsed = array_merge($this->_defaults, $parsed);
		$this->forward($parsed['module'], $parsed['action']);
	}

	public function forward($module, $action)
	{	$command = $this->_getCommand($module, $action);
		$command->launch($this->_request, $this->_response);
	}

	private function _getCommand($module, $action)
	{   $path = $_SERVER['DOCUMENT_ROOT'] . "/" . "$module/$action.php" ;
        if (!file_exists($path)) 
            throw new Exception("Commande inconnue: " . $path);
 
        require($path) ;
        $class = $action.'Action';
        return(new $class($this));
	}

	public function getResponse()
	{
		return $this->_response;
	}
	
	public function redirect($url)
	{
		$this->_response->redirect($url);
	}
	
	public function render($file)
	{
		$view = new View();
		$this->_response->setBody($view->render($file,$this->_response->getVars()));
	}
}
J'ai un problème de compréhension/sémantique au niveau du statement en bold.

Sachant que dans cette méthode, les paramètres sont(sauf erreur de ma part) :

Code :
1
2
3
4
 
$module = index, 
 
$action = index
Bref, je ne comprends pas trop cette méthode et surtout pas le return statement:

Code :
1
2
3
4
5
6
return(new $class($this))

Sachant que

$class devrait être == à "index.Action"
Ou soit je ne pige pas bien, mais je souhaiterai un éclairage de votre part...
__________________
Esteban
ETVigan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 21h06   #2
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
Code :
$class = $action.'Action';
donc, $class est égal à indexAction

return renvoie une instance de la classe indexAction, avec l'objet en cours comme paramètres du constructeur.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 09h09   #3
Débutant
 
Avatar de ETVigan
 
Homme Esteban
Conseil - Consultant en systèmes d'information
Inscription : avril 2010
Messages : 632
Détails du profil
Informations personnelles :
Nom : Homme Esteban
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Finance

Informations forums :
Inscription : avril 2010
Messages : 632
Points : 122
Points : 122
Envoyer un message via MSN à ETVigan Envoyer un message via Skype™ à ETVigan
Par défaut Que signifie return(new $class($this));

Merci de ta réponse.

Mais:

Code :
1
2
3
4
5
Un object de classe IndexAction....
 
Cela veut'il dire que je crée une nouvelle sorte d'object [de nom "indewAction"] 
 
auquel je passe l'adresse du Controller (qui est un singleton) comme paramètres ?
Merci de préciser !
__________________
Esteban
ETVigan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h04   #4
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
Tu instancies un objet de la class indexAction ($action.Action) qui est définit dans le fichier index/index.php ("$module/$action.php"), avec en paramètre l'objet courant soit l'instance du FrontController (qui est effectivement un singleton).
Ensuite tu retournes cet objet.
__________________
Smiley de Plomb 2009
Anciennement FrancoisIT
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h59   #5
Débutant
 
Avatar de ETVigan
 
Homme Esteban
Conseil - Consultant en systèmes d'information
Inscription : avril 2010
Messages : 632
Détails du profil
Informations personnelles :
Nom : Homme Esteban
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Conseil - Consultant en systèmes d'information
Secteur : Finance

Informations forums :
Inscription : avril 2010
Messages : 632
Points : 122
Points : 122
Envoyer un message via MSN à ETVigan Envoyer un message via Skype™ à ETVigan
Par défaut Que signifie return(new $class($this));

Ok merci.
Dans ce contexte et sachant que tous les écrans/fonctions ont le même design d"écran (on pourrait presque en faire un template Dreamweaver) sauf qlques echo &var.. définies dans le index.php et passés via $_SESSION, ce template, je le mets où dans l'architecture MV C ou s'agit'il d'un require_once définit dans le fichier inclut dans la classe en question.

Ce fichier a l'allure suivante:

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
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<?php
// =============================================================================================================================== //
require_once $_SERVER['DOCUMENT_ROOT'] .  "/class/define/equate.php";       
$debug_myPage = true ;
// =============================================================================================================================== //
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"/><head>
	<link href="../css/jecrapahute.css" rel="stylesheet" type="text/css"/>
<?php
/**
* Inclusion metatags
*
*/
 	$pattern = $_SERVER['DOCUMENT_ROOT'] . "/metatags/" ;
	if (isset( $_SESSION[SCREEN] ) )
		{	$file = $pattern . $_SESSION[SCREEN] . ".php" ;
			if (!file_exists($file))
                { 	$file = $pattern . "index.php" ;
					user_error("Substition made for missing METATAGS[".$_SESSION[SCREEN]." - INDEX used ]" , E_USER_WARNING) ;
				}
		}
	else
		{	$file = $pattern . "index.php" ;
			user_error("Substition made for missing METATAGS[ INDEX used ]" , E_USER_WARNING) ;
		}
	require_once $file ;
// =============================================================================================================================== //
?>
	<title><?php if (isset($_SESSION[SITE])) echo $_SESSION[SITE]  ?></title>
</head>



<style type="text/css">
<!--
body,td,th,tr {
	font-family: Verdana, Arial, Helvetica, sans-serif;
}
body {
	background-color: #FF00FF;
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 1004px;
}
-->
</style>
<body class="body">
<!-- ================================================ -->
<!--       Ancre pour retour au sommet de la page     -->
<!-- ================================================ -->
<a name="Top" id="Top"></a>

<!-- ============================================================================================================================ -->
<!--       Bannire horisontale                                                                                                   -->
<!-- ============================================================================================================================ -->
<table cellspacing="0" cellpadding="0" width="1004">
<!-- ============================================================================================================================ -->
<!--       Page de SIGNON                                                                                                         -->
<!-- ============================================================================================================================ -->
<tr>
    <td rowspan="2" class="signon">
		<?php 
			require_once $_SERVER['DOCUMENT_ROOT'] .  "/includes/signon.php";       
		?>	
	</td>
</tr>
</table>
<!-- ============================================================================================================================ -->
<!--       Bannière horisontale                                                                                                   -->
<!-- ============================================================================================================================ -->
<table cellspacing="0" cellpadding="0">
<tr>
    <td colspan="2">
    	<table cellspacing="0" cellpadding="0">
  		<tr>
    		<td class="paysviganais" width="113" height="113">
				<a href="../index.php" title="L'office du tourisme que je remercie !">
					<img src="../images/paysviganais.jpg" width="113" height="113" border="0"
						 title="Vous allez vous branche sur l'office du Tourisme du Vigan !"/>  
          		</a>			
			</td>
    		<td class="banniere">
				<a href="../index.php" title="Retour à l'index du site Je Crapahute !">
					<img src="../images/banniere.jpg" width="750" height="113" border="0"
						 title="Vous êtes sur le site: Je crapahute !"/>  
          		</a>			
            </td>
   			<td class="etvictor">
				<img src="../images/ETVictor.jpg" width="141" height="113"/>
			</td>
		</tr>
		</table>	
	</td>
</tr>
<!-- ============================================================================================================================ -->
<!--       Menu principal[horizontal]                                                                                             -->
<!-- ============================================================================================================================ -->
<tr>
    <td colspan="2" class="menu">		
		<?php 
			user_error("myPage.php[".$_SESSION[MENU]."]", E_USER_NOTICE) ;
 			if (isset( $_SESSION[MENU] ) && $_SESSION[MENU] )
	 			{	$req = $_SERVER['DOCUMENT_ROOT'] . "/includes/" . $_SESSION[MENU] . ".php" ;    
					if ($debug_myPage)
						user_error("Skeleton[".$req."]  found menu !!!" , E_USER_NOTICE) ;   
					require_once $req ;
				}
 			else
 				{	$req = $_SERVER['DOCUMENT_ROOT'] . "/includes/index.php" ;  
					user_error("Skeleton[SESSION[MENU][".$req."}] doesn't exist => substitution made !!!" , E_USER_WARNING) ;
				} 
			require_once $req ;
		?>
	</td>
</tr>
<!-- ============================================================================================================================ -->
<!--       Ligne de message généré pvia la variable [$kimsg]                                                                      -->
<!-- ============================================================================================================================ -->
<tr>
    <td colspan="2" class="klimsg">
		<table width="100%" cellspacing="0" cellpadding="0">
	  	<tr>
			<td width="20">&nbsp;</td>
    		<td>
				<?php
					if (isset( $_SESSION[SITE] ) )
						{	if (isset( $_SESSION[KLIMSG] ) )
                       			$klimsg = $_SESSION[KLIMSG] ;
							else
                       			{    $klimsg = "Bienvenue sur le site de " . $_SESSION[SITE] ;
						   			 user_error("Substition made for missing variable[KLIMSG]" , E_USER_WARNING) ;
								}
							echo " Je Crapahute a quelque chose à vous dire ==> " . $klimsg ;
						}
					else
						user_error("MYPAGE: la variable $SITE n'existe pas" , E_USER_ERROR) ;
				?>			
			</td>
    		<td>&nbsp;</td>
  		</tr>
		</table>	
	</td>
 </tr>
<!-- ============================================================================================================================ -->
<!--       Page centrale                                                                                                          -->
<!-- ============================================================================================================================ -->
<tr>
    <td>
		<table width="100%" class="areamain">
  		<tr valign="top">
    		<td width="20%" class="areasubmenu">
				<a href="../remarque.php" title=''>
					<img src="../images/working.png" 
		     			title="Soyez tolérant et constructif.... Cliquez cette image pour faire un commentaire, merci !" 
			 			width="125" height="39" border="0" />			
				</a>
				<?php  

					if ($this->screen)
                       {   	if ($this->submenu)
								$req = "/submenu/" . $this->submenu . ".php";
							else
                            	{	$req = "/submenu/index.php";
////////                       	  	user_error("Skeleton[.includes/" . $this->menu . ".php ] doesn't exist !!!" , E_USER_WARNING) ;
                            	}
                        	require_once $_SERVER['DOCUMENT_ROOT'] . $req ;
					    }
				?>			
				</td>
   				<td width="80%" class="areamain">
				<?php  
					{	if (isset( $_SESSION["FORM"] ) )
                           	$req ="/doc/do_" . $_SESSION[FORM] . ".php";
						else
                           	{   $req = "/doc/do_index.php";
								$_SESSION[FORM] = "index" ;
							   	user_error("Substition made for missing variable FORM" , E_USER_WARNING) ;
							}
						require_once $_SERVER['DOCUMENT_ROOT'] . $req ;
					}
				?>
		  <td>	
		</tr>
		</table>	
	</td>
<!-- ============================================================================================================================ -->
<!--       Adsense                                                                                                                -->
<!-- ============================================================================================================================ -->
    <td class="adsense">
		<?php 
			require_once $_SERVER['DOCUMENT_ROOT'] .  "/includes/adsense.php";       
		?>
	</td>
</tr>

<!-- ============================================================================================================================ -->
<!--       Bottom                                                                                                                 -->
<!-- ============================================================================================================================ -->
<tr>
    <td class="bottom">		
	  	<?php 
			require_once $_SERVER['DOCUMENT_ROOT'] .  "/includes/bottom.php";       
		?>	
	</td>
    
	<td colspan="2">
		<table class="right_cornner" cellspacing="0" cellpadding="0">
  		<tr>
    		<td colspan="2" width="60">&nbsp;</td>
    		<td width="20">
				<a href="#Top" title="Retour au sommet de l'écran">
					<img src="../images/top.gif" title="Retour au sommet de l'écran" width="20" height="20" />				
				</a>							            
			</td>
    		<td colspan="3" width="60">&nbsp;</td>
  		</tr>
		</table>	
	</td>
</tr>
<!-- ============================================================================================================================ -->
</table>
</body>
</html>
<!-- ============================================================================================================================ -->
Avec en gras, le traitement de l'action... en fait c'est un peu la logique inverse.....

Un peu + tard....

En fait je me rends compte que je suis revenu à la question posée dans un autre post à laquelle Benjamin Delespierre a répondu en me proposant le modèle MVC http://www.developpez.net/forums/d10...sion-html-php/

Si mvc est basé sur l'URL, mon modèle est basé sur des répertoires ou je mets du coding faisant tjs le même type d'action.... et sur l'interception des événements via $_POST....

Mais MVC est largement répandu et j'y gagnerai sans doute en faisant la migration même si cela me prend un boulot non négligeable.....

Merci d'avance de me remettre sur les bons rails !!!
__________________
Esteban
ETVigan 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 13h56.


 
 
 
 
Partenaires

Hébergement Web