Architecture MVC

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Architecture MVC

Re: Architecture MVC

par moogli » 07 févr. 2012, 14:26

peut être :)

en fait dans un système modélisé objet, tout est objet :)

en clair, au minimum, tu a une classe contrôleur, une modèle et une vue.

En vrai il y en a plus que ça, vu qu'en général le modèle contient des classes qui font les accès SGBD / fichiers etc, des classes qui représente un modèle (par exemple, dans un forum, une classe message qui va correspondre a un message, le thread sera une liste de message, donc d'objet message).

au passage une classe ne contient pas de fonction mais des méthodes :)

par contre à partir du moment ou ta classe fait un affichage elle ne peux pas être dans le modèle (ni dans le contrôleur d'ailleurs) ce sera une vue.

@+

Re: Architecture MVC

par juliette » 07 févr. 2012, 13:58

ok, je commence a comprendre...
est-ce qu'une class avec une série de fonction est un model ???

Re: Architecture MVC

par xTG » 07 févr. 2012, 13:39

ok, je vais tester...
une dernière chose, j'ai cru comprendre que le html du model est en trop, est-ce bien ça ???
Oui en effet, on peut à la rigueur charger dans une variable un texte non formaté (sans balise) ou bien placer un booléen qui sera réutilisé par la Vue pour afficher l'erreur comme on le souhaite.

Re: Architecture MVC

par Shenryu » 07 févr. 2012, 13:22

Oui le modèle ne doit pas contenir de code HTML. C'est la vue qui se charge d'afficher les données.

Tiens, tu as un article plutôt pas mal sur Wikipedia concernant le MVC : http://fr.wikipedia.org/wiki/Mod%C3%A8l ... %C3%B4leur. Il n'est pas propre à PHP mais ça va te donner peut-être plus de détails concernant le fonctionnement de chaque partie ;)

Re: Architecture MVC

par juliette » 07 févr. 2012, 13:17

ok, je vais tester...
une dernière chose, j'ai cru comprendre que le html du model est en trop, est-ce bien ça ???

Re: Architecture MVC

par xTG » 07 févr. 2012, 13:15

C'est la même chose que ce qu'a codé miiidooo19 sauf qu'à la place de la fonction d'envoi d'email c'est une fonction de vérification d'existence du membre en bdd.

Re: Architecture MVC

par juliette » 07 févr. 2012, 13:12

merci, peux tu me montrer un exemple stp genre celui que tu as mis en haut pour un formulaire de connexion, je me représente mal le travail...
je ne parle pas du code, mais de la séparation...
merci d'avance

Re: Architecture MVC

par xTG » 07 févr. 2012, 13:03

Oui le principe est là.
Sachant que le modèle n'est pas que des données provenant d'une BDD mais de n'importe quel support de stockage.
Et pareil pour la vue, ce n'est pas forcement une page HTML mais peut aussi être le retour d'un webservice : json, xml, ect.

Re: Architecture MVC

par juliette » 07 févr. 2012, 12:53

salut, je profite de ce sujet...
j'ai un peut de mal le dessus aussi:

le model = les données récupéré en bdd
le contrôleur = vérifie la présence et l'intégrité des données
la vue = page html affiché au visiteur

est-ce bien ça ???

Re: Architecture MVC

par miiidooo19 » 06 févr. 2012, 18:03

c'est réglé :) merci pour votre aide

pour infos le dernière code que j'ai posté est correcte y a juste une erreur dans <input type="submit" name="valide"
alors que quand je fait le test dans controleur si le formulaire est validé je met if(isset($_POST['valider'])) #-o

Re: Architecture MVC

par miiidooo19 » 06 févr. 2012, 17:38

ok bon la voila ce que j'ai fait je pense que c'est correct a vous de me corriger

avant de passer au code je voulais savoir maintent ds formulaire <form action je met quel lien ? lien vers contrôleur?

voici le code : contrôleur
require_once MODELS.'catalogue.php';
	if(isset($_POST['valider']))
	{  
		$msg = SendMail($_POST['nom'],$_POST['prenom'],$_POST['mail'],$_POST['tel']);
		$smarty->assign('msg', $msg);
	}
modele :
function SendMail($nom,$prenom,$mail,$tel)
	{
		$msg = '';
		
			if (($nom == '') or ($prenom == '') or ($mail == ''))
				$msg ='<center><span style="color:red; font-weight:blod;"> Votre formulaire est invalide merci de remplire les champs obligatoires</span><center><br />';
			else{
			
				if ($tel == '')
					$tel ='Non précisé';
					
				/* Ici envoie l mail à infos@eco-poules
				  déclaration des paramètres de la fonction mail 
				*/
				if(mail($to,$sujet,$contenu,$headers))
					$msg ='<center><span style="color:green; font-weight:blod;">Votre demande a bien été envoyé, elle sera traité dans les plus bref délais. Merci pour votre compréhension</span><center><br /> ';
				else
					$msg = 'Votre demande n\'a pas été envoyé, merci d\'essayer plutard';
			}
		
		return $msg;
	}
Vue :
<br/><br/><br/>

<center>
<div id="catalogue">
<span style="font-weight:bold;">Veuillez remplir les champs suivants :</span><br /><br />
	<!--{$msg}-->
	<form method="POST" action="./catalogue.html" >
		<table >
			<tr>
				<td>Nom <span style="color:red;">*</span></td><td> <input type="text" name="nom" style="background-color:#e4f9d5;"/></td>
			</tr>
			<tr>
				<td>Prénom <span style="color:red;">*</span></td><td> <input type="text" name="prenom" style="background-color:#e4f9d5;"/></td>
			</tr>
			<tr>
				<td>Adresse Mail <span style="color:red;">*</span></td><td> <input type="text" name="mail" style="background-color:#e4f9d5;"/></td>
			</tr>
			<tr>
				<td>Tèl </td><td> <input type="text" name="tel" style="background-color:#e4f9d5;"/></td>
			</tr>
			<tr>
				<td></td><td> <input type="submit" name="valide" value="Je demande un catalogue Eco-poule" style="font-weight : bold; color:green;background-color:#fda13f;height:35px;"/></td>
			</tr>
		</table>
	</form>
</div>
</center>

Re: Architecture MVC

par Shenryu » 06 févr. 2012, 17:29

donc c'est j'ai bien compris pour vérifier si le $_POST['nom'] == '' par exemple, faut le faire dans contrôleur c'est ça?
Dans ton cas oui. Ton contrôleur sert à déclencher les traitements en fonction de ta requête serveur. En gros il s'agit d'appeler ton modèle et d'enregistrer en base si les données envoyées correspondent à tes attentes puis rediriger vers la vue correspondante. Dans le cas où tes données en entrée du contrôleur ne sont pas valides, tu peux simplement envoyer un ou plusieurs messages d'erreurs à ta vue qui se chargera de les mettre en forme.

Maintenant, ce n'est pas une généralité.
Selon les architectures, tu peux très bien avoir des objets formulaires associés avec des validateurs auquel c'est ton validateur qui va se charger de tester si le nom est valide ou non.

Re: Architecture MVC

par miiidooo19 » 06 févr. 2012, 17:09

donc c'est j'ai bien compris pour vérifier si le $_POST['nom'] == '' par exemple, faut le faire dans contrôleur c'est ça?

Re: Architecture MVC

par xTG » 06 févr. 2012, 14:41

Tout le HTML que tu as dans ton Modèle n'a en fait rien à faire ici.
C'est dans la Vue que ça doit être.

Et je ne vois toujours pas ce que tu veux.
Passage de variable du contrôleur à la vue c'est via la fonction assign() de Smarty.

Passage de variable du contrôleur au modèle c'est via un paramètre de fonction dans ton cas.
Chose qui devrait être fait si tu veux parler de réutilisabilité en fait. Car utiliser $_POST n'est pas réutilisable.
Alors que si ta fonction prend en paramètre des variables, tu peux par la suite la réutiliser pour n'importe quoi et non uniquement pour $_POST.
C'est le Contrôleur qui doit travailler $_POST en la passant au modèle.

Re: Architecture MVC

par miiidooo19 » 06 févr. 2012, 14:18

voila je donne le code des 3 fichiers comme ça vous comprenez ce que je veux

commençant par le contrôleur :
require_once MODELS.'actualites.php';
	  
	if(isset($_POST['valider']))
	{
		$msg = SendMail();
		$smarty->assign('msg', $msg);
	}else{
		$form = getForm()
		$smarty->assign('form', $form);
	}
puis le modèle :
<?php

	
	function SendMail()
	{
		$msg = '';
		if (($_POST['nom'] == '') or ($_POST['prenom'] == '') or ($_POST['mail'] == ''))
			$msg ='<center><span style="color:red; font-weight:blod;"> Votre formulaire est invalide merci de remplire les champs obligatoires</span><center><br />';
		else{
			
			if ($_POST['tel'] == '')
				$tel ='Non précisé';
			else
				$tel = $_POST['tel'];
				
			// Ici envoie l mail avec la function mail 

			$msg ='<center><span style="color:green; font-weight:blod;">Votre demande est envoié, elle sera traité dans les plus bref délais Merci pour votre compréhension</span><center><br /> ';
		}
		
		return $msg;
	}
	function getForm()
	{
		$formulaire ='<center>
						<form method="POST" action="#" >
							<table >
								<tr>
									<td>Nom <span style="color:red;">*</span></td><td> <input type="text" name="nom" style="background-color:#e4f9d5;"/></td>
								</tr>
								<tr>
									<td>Prénom <span style="color:red;">*</span></td><td> <input type="text" name="prenom" style="background-color:#e4f9d5;"/></td>
								</tr>
								<tr>
									<td>Adresse Mail <span style="color:red;">*</span></td><td> <input type="text" name="mail" style="background-color:#e4f9d5;"/></td>
								</tr>
								<tr>
									<td>Tèl </td><td> <input type="text" name="tel" style="background-color:#e4f9d5;"/></td>
								</tr>
								<tr>
									<td></td><td> <input type="submit" name="valide" value="Je demande un catalogue Eco-poule" style="font-weight : bold; color:green;background-color:#fda13f;height:35px;"/></td>
								</tr>
							</table>
						</form>
					</center>';
		return $formulaire;
	}
?>
et pour finir voici le code de vue (fichier tpl) :
<!--{$msg}-->
<!--{$form}-->