MVC - PHP et Jquery

MVC - PHP et Jquery - PHP - Programmation

Marsh Posté le 21-09-2010 à 11:15:25    

Bonjour à tous et merci de me lire !  
 
Bon voila je suis en train d'essayer de créer une application web en php objet et surtout en mvc et j'ai besoin de conseil !  
 
Je souhaite faire une réel application avec aucun temps de chargement.
 
Elle est structuré comme ceci :  
 
http://img72.imageshack.us/i/layoutcv.jpg/
 
 
J'ai donc à gauche un menu avec des images cliquables " client ", "accueil" qui, une fois cliqués lance ma fonction js callcontent('cat'). Cette fonctions JS vas poster la variable cat dans mon callcontent.php (http://pastebin.com/guNqFmZS) et celui-ci vas renvoyer la vue souhaité.  
 
J'aimerai donc savoir si vous considérez mon callcontent.php comme une forme de contrôleur valide ou si je suis pas du tout sur la bonne voix.  
 
Voila un exemple d'une de mes vue : http://pastebin.com/UFEpFexe  
 
Merci d'avance pour vos conseils :)

Reply

Marsh Posté le 21-09-2010 à 11:15:25   

Reply

Marsh Posté le 21-09-2010 à 11:55:31    

anycee a écrit :


J'aimerai donc savoir si vous considérez mon callcontent.php comme une forme de contrôleur valide ou si je suis pas du tout sur la bonne voix.

 
Citation :


<?php

 

$managervillage = new VillageManager($db);

 

[...]

 

?>
 
<script>
  $(document).ready(function() {
    $("#tabs" ).tabs();
  });

[...]

 

non.
Tu as des bouts de vue et de modèle dans ton controleur.


Message édité par skeye le 21-09-2010 à 11:56:32

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-09-2010 à 12:34:59    

Donc si je fais un include de ma vue dans mon contrôleur on considère que ma vue est dans mon contrôleur ?  
 
De quel maniere afficher ma vue si je ne fais pas d'include ?  
 

Reply

Marsh Posté le 21-09-2010 à 12:44:21    

anycee a écrit :

Donc si je fais un include de ma vue dans mon contrôleur on considère que ma vue est dans mon contrôleur ?  
 
De quel maniere afficher ma vue si je ne fais pas d'include ?  
 


 
Euh tu as ton code html directement dans callcontent.php. C'est tout sauf un include, ça.
De la même manière, tu utilises directement un objet "$db" qui est manifestement une connexion à une base de données.
 
Je ne vois pas comment tu peux imaginer avoir une quelconque séparation des couches comme ça.
Le contrôleur n'a pas à savoir que la vue génère du code html. Ni si le modèle est stocké dans une base de données.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-09-2010 à 12:46:35    

En fait quand on clique sur un bouton du menu, la fonction js callcontent('var') post les variables sur callcontent.php et celui-ci doit renvoyé la vue, la fonction js vas donc afficher dans ma div la vue.  
 
voila ma fonction callcontent();  
http://pastebin.com/kYgj4cDh
 

Reply

Marsh Posté le 21-09-2010 à 12:47:56    

Je ne vois pas de code html dans mon callcontent.php ( http://pastebin.com/guNqFmZS )

Reply

Marsh Posté le 21-09-2010 à 12:49:56    

Ok par contre pour mon $db, de quel manniere tu structurerais cela toi du coup ? Un petit exemple serait le bienvenue pour que je reparte sur le droit chemin. En tout cas merci pour ton temps.

Reply

Marsh Posté le 21-09-2010 à 13:46:59    

(au temps pour moi, j'ai confondu tes sources)

 

Le mieux serait que tu jettes un oeil au topic php-MVC : http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0


Message édité par skeye le 21-09-2010 à 13:47:20

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 21-09-2010 à 14:57:03    

Je développe aussi une application web en MVC
en faite j'utilise une classe pour passer les parametres du model au controleur.
je développe :  
le contrôleur fait quelques tests, instancie une classe qui stockera les données, appel un multiActionControler qui appel si nécessaire le model
les données sont retournées en référence au multiActionControler.
vu que le controleur est instancié en utilisant le pattern Singleton, le multiActionControler demande cet instance et rempli la classe qui stocke les données.
ensuite le contrôleur reprend la main et exécute la fonction render qui analyse la classe qui stocke les données et va chercher la vue en lui passant les données.
 
voila c'est un peu long mais je crois que l'idée du MVC est là.
 
Edit : le lien vers ton image est pas bon : http://img72.imageshack.us/i/layoutcv.jpg/


Message édité par stef_dobermann le 21-09-2010 à 15:01:52

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 21-09-2010 à 14:59:49    

autre chose suite à ta source : http://pastebin.com/UFEpFexe
l'idée d'utiliser des fonctions magic est justement qu'elle sont magic
 
pas la peine de faire :

Code :
  1. $village->__get('nom_village');


ça suffit :

Code :
  1. $village->nom_village;


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 21-09-2010 à 14:59:49   

Reply

Marsh Posté le 21-09-2010 à 15:19:45    

Ah ok Stef_dobermann, effectivement c'est "magique" lol ! J'ai du tomber sur un vieux tuto ou j'ai mal lu ...  
 
En ce qui concerne mon apply du coup j'ai remanier un peu.  
 
Un dossier "Model" avec toutes mes classes métiers et accès aux donnés.  
Un dossier "View" avec mes vues ( http://pastebin.com/vzLqDNKu )  
 
Et un dossier "Controllers" avec un controlleur un controlleur pour chaque vue que je souhaite afficher par exemple :  http://pastebin.com/08i90DsL  
 
Ensuite dans mon index.php  J'ai un appel à mon view/layout.php contenant le design. Et chaque fois que la fonction callcontent('content') est lancé, ça appel mon controller.php  ( http://pastebin.com/ys7ChPd6 )  
 
Puis-je dire désormais que j'utilise le model MVC ?

Reply

Marsh Posté le 21-09-2010 à 15:32:28    

Stef je t'ai perdu à partir d'ici  
"le pattern Singleton, le multiActionControler demande cet instance et rempli la classe qui stocke les données.
ensuite le contrôleur reprend la main et exécute la fonction render qui analyse la classe qui stocke les données et va chercher la vue en lui passant les données" lol. J'imagine qu'à partir d'ici ce n'est plus un simple contrôleur mais un contrôleur plutôt avancé ? Ou alors je dois être très très bête :p

Reply

Marsh Posté le 21-09-2010 à 21:53:39    

Le code est plus jolie, une net amélioration par rapport à l'autre :)
 

anycee a écrit :

Ah ok Stef_dobermann, effectivement c'est "magique" lol ! J'ai du tomber sur un vieux tuto ou j'ai mal lu ...  
 
En ce qui concerne mon apply du coup j'ai remanier un peu.  
 
Un dossier "Model" avec toutes mes classes métiers et accès aux donnés.  
Un dossier "View" avec mes vues ( http://pastebin.com/vzLqDNKu )  
 
Et un dossier "Controllers" avec un controlleur un controlleur pour chaque vue que je souhaite afficher par exemple :  http://pastebin.com/08i90DsL  
 
Ensuite dans mon index.php  J'ai un appel à mon view/layout.php contenant le design. Et chaque fois que la fonction callcontent('content') est lancé, ça appel mon controller.php  ( http://pastebin.com/ys7ChPd6 )  
 
Puis-je dire désormais que j'utilise le model MVC ?


 
mais dans le http://pastebin.com/vzLqDNKu
ligne 48 : $ville = $managerv->getville($village->__get('id_ville'));
vu que tu as fait une boucle sur tes villages, puis tu récupère la ville, cela veux dire qu'a 1 village correspond 1 ville, donc pourquoi ne pas revoir ta classe managervillage pour intégré directement la ville à l'intérieur ?
plus simple, une classe en moins à entretenir et à instancier
 

Citation :

Puis-je dire désormais que j'utilise le model MVC ?


 
je pense que tu n'est pas loin, mais le controleur n'est toujours pas censé connaître le moyen d'accéder au données, donc $db n'a rien à faire dans le contrôleur !


Message édité par stef_dobermann le 21-09-2010 à 21:56:57

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 21-09-2010 à 22:13:29    

La ville fais partie de mon objet village mais sous forme d'id, ID_VILLAGE, mais si tu connais un moyen de l'inclure directement je suis preneur :p.  
 
Par contre je ne comprend pas pourquoi le controlleur ne peut pas acceder au données.  
 
J'ai encore revu mon model.  
 
J'ai désormais un BaseControlleur ainsi que des extends sur mes modules principaux ClientControleur qui regroupe des methodes pour get/view etc ...  
 
Voila mon clientControleur :  
 
public function show()  
{
 $managerclient = new ClientManager();  
 $managerville = new VilleManager();  
 $clients = $managerclient->getList();  
 
    $this->registry->template->clients = $clients;
 $this->registry->template->managerville = $managerville;
    $this->registry->template->show('client');
}
 
 
public function view(){
 
 
 $managerclient = new ClientManager();
 $managerville = new VilleManager();
 $client = $managerclient->get($id_client);
 $ville = $managerville->getname($client->id_ville);
 
 $this->registry->template->ville = $ville;
 $this->registry->template->client = $client;
 $this->registry->template->show('seeclient');
}
 
 
Le controleur charge donc les données puis appel la vue.  
 
C'est mieu donc :p ?  
 
 

Reply

Marsh Posté le 21-09-2010 à 22:58:20    

Citation :

La ville fais partie de mon objet village mais sous forme d'id, ID_VILLAGE, mais si tu connais un moyen de l'inclure directement je suis preneur :p.


on peut chercher, tu hydrate ton objet village depuis une DBB ?
 

Citation :

Par contre je ne comprend pas pourquoi le controlleur ne peut pas acceder au données.


c'est le model qui accède aux données dans un MVC, le contrôleur  
Model : Le model va donc contenir tout la business logic et l'accès aux données. Il doit être indépendant des autres couche, et il ne doit même pas savoir qu'il est utilisé dans un MVC.
View : La vue récupère les données à partir du model, et s'occupe de les afficher. Le controller va donc instancier la bonne view, lui filer le model, et la vue va s'occuper de récupérer ce qu'elle veux.
Controller :Lui va s'occuper de gérer ce que l'utilisateur demande, va instancier le model et la bonne vue, puis gérer tout ça.  

Citation :


J'ai encore revu mon model.  
 
J'ai désormais un BaseControlleur ainsi que des extends sur mes modules principaux ClientControleur qui regroupe des methodes pour get/view etc ...  
 
Voila mon clientControleur :  
 
public function show()  
{
 $managerclient = new ClientManager();  
 $managerville = new VilleManager();  
 $clients = $managerclient->getList();  
 
    $this->registry->template->clients = $clients;
 $this->registry->template->managerville = $managerville;
    $this->registry->template->show('client');
}
 
 
public function view(){
 
 
 $managerclient = new ClientManager();
 $managerville = new VilleManager();
 $client = $managerclient->get($id_client);
 $ville = $managerville->getname($client->id_ville);
 
 $this->registry->template->ville = $ville;
 $this->registry->template->client = $client;
 $this->registry->template->show('seeclient');
}
 
 
Le controleur charge donc les données puis appel la vue.  
 
C'est mieu donc :p ?


 
ce me paraît nettement mieux :)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 21-09-2010 à 23:14:48    

anycee a écrit :

Stef je t'ai perdu à partir d'ici  
"le pattern Singleton, le multiActionControler demande cet instance et rempli la classe qui stocke les données.
ensuite le contrôleur reprend la main et exécute la fonction render qui analyse la classe qui stocke les données et va chercher la vue en lui passant les données" lol. J'imagine qu'à partir d'ici ce n'est plus un simple contrôleur mais un contrôleur plutôt avancé ? Ou alors je dois être très très bête :p


mon contrôleur comporte les méthodes de base :  
- il parse l'URL, filtre les paramètres,  
- initialise la route,
- appel un contrôleur secondaire nommé, multiActionControleur, qui le est en réalité le model.
- puis une dernière méthode appelé render (rendu en français), permet à partir de la classe qui stocke les données (que j'ai nommé modelView)
appel la vue (par html, XML, fichier PDF,...)
 
Pourquoi multiActionControleur car il "examine" l'action que l'utilisateur demande (read, list,...) et fait
 
voila, pour ce soir ce sera tout ;)


---------------
Tout à commencé par un rêve...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed