Page 1 sur 2
Architecture MVC
Posté : 06 févr. 2012, 11:09
par miiidooo19
Bonjour a tous le monde
je début en architecture MVC et je veux faire un simple formulaire traiter et renvoyer les données a une BDD
mais je sais pas comment faire pour passer les données d'un fichier tpl au fichier php
sachant que j''utilise smarty comme moteur de template
Merci d'avance
Re: Architecture MVC
Posté : 06 févr. 2012, 11:27
par moogli
salut,
tpl c'est rien pour un navigateur lui il voit du HTML donc un formulaire c'est un formulaire.
pour ce qui est du traitement du formulaire, la faut voir comment fonctionne la moulinnettte de smarty.
pour ça ben des tutos spécialisé, le premier que google m'a fournis étant
celui ci
pour plus
http://www.google.fr/search?q=smarty+pour+les+nuls
@+
Re: Architecture MVC
Posté : 06 févr. 2012, 12:22
par xTG
A noter que beaucoup de cours ou d'articles présentent le MVC au travers d'un framework complet ou bien un système développé en POO.
Mais il faut savoir que MVC n'est aucunement synonyme d'objets. C'est juste une technique pour séparer trois choses (les données, le traitement et l'affichage).
Exemple d'application de MVC :
<?php
// Partie modèle
// ...
$res = mysql_query($sql); // on récupère les données d'une base de données
// ...
$file = fopen('monFichier.txt','r'); // ou bien d'un fichier
// ...
// Partie Contrôleur
// ...
$data['date'] = date('Y-m-d H:i:s', $data['timestamp']); // on traite une donnée
//...
// ou bien une autre
if( $data_fichier['compteur'] > 5 )
$flag_compteur = true;
else
$flag_compteur = false;
// ...
// Partie Vue
// ...
echo $data['date'];
// ..
if( $flag_compteur === true )
echo '<div class="conteneur success">' . $data_fichier['compteur'] . '</div>';
else
echo '<div class="conteneur">' . $data_fichier['compteur'] . '</div>';
// ...
Re: Architecture MVC
Posté : 06 févr. 2012, 14:05
par miiidooo19
je suis suis d'accord avec toi le MVC c'est pas forcement de OBJET
moi je veux faire ça juste en procédurale mais comment passer les données d'un fichier a un autres :s
Re: Architecture MVC
Posté : 06 févr. 2012, 14:11
par xTG
Tu parles de passage de variable entre page ?
Ou bien entre fichiers inclus ?
Le premier : bah avec un formulaire en méthode GET ou POST, via des variables dans une url ou bien dans des variables de session.
Le second : un script inclus reprend toutes les variables déclarées avant lui.
Re: Architecture MVC
Posté : 06 févr. 2012, 14:18
par miiidooo19
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}-->
Re: Architecture MVC
Posté : 06 févr. 2012, 14:41
par xTG
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
Posté : 06 févr. 2012, 17:09
par miiidooo19
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
Posté : 06 févr. 2012, 17:29
par Shenryu
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
Posté : 06 févr. 2012, 17:38
par miiidooo19
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
Posté : 06 févr. 2012, 18:03
par miiidooo19
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']))

Re: Architecture MVC
Posté : 07 févr. 2012, 12:53
par juliette
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
Posté : 07 févr. 2012, 13:03
par xTG
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
Posté : 07 févr. 2012, 13:12
par juliette
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
Posté : 07 févr. 2012, 13:15
par xTG
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.