MVC ET PHP

MVC ET PHP - PHP - Programmation

Marsh Posté le 18-09-2009 à 09:55:04    

Bonjour,
ce que j ai compris du mvc:
 
Controlleur -> capte un evenement appel le model puis la vue
Model -> methode metier , crée l objet qui sera affiché par la vue (la je le serialize)
Vue -> affiche l objet (je le unserialize en debut et serialize  a la fin )
 
 
ma question est-ce normal que dans ma vue j 'ai:
 -  un unserialize en debut et serialize  a la fin de mon objet
 - d avoir des tests genre if(toto->getX()==true){ <span class="inactif">abc<span> } else <span class="actif">abc<span>
 ou encore if(toto->getX()==true){ <span class="inactif">abc<span> } else <span class="inactif">dbc<span>
 
et meme question pr les formulaires genre:
 
<input ....  maxlength=\''.toto->getSize().'\' >
 
merci  :jap:  
 
toute aide est la bienvenue  :jap:  :jap:  :jap:


Message édité par schum-hacker le 18-09-2009 à 09:59:02
Reply

Marsh Posté le 18-09-2009 à 09:55:04   

Reply

Marsh Posté le 18-09-2009 à 10:05:31    

Oui biensur c'est normal d'avoir des if dans ta vue ( au passage le ==true n'est pas obligatoire ;) ). Après si vraiment la vue est complètement différente en fonction d'une valeur precise,mieux vaut mettre le filtre if dans le controller et utiliser différentes vues.
 
Sinon pour le coup du serialize/unserialize tu peux expliquer plus en detail ce que tu veux faire ? :??:


---------------
Fresh
Reply

Marsh Posté le 18-09-2009 à 10:16:53    

au passage le ==true n'est pas obligatoire ;) lol
Sinon pour le coup du serialize/unserialize tu peux expliquer plus en detail ce que tu veux faire ? :??::
c'est pour passer l'objet a ma vue:
ce que je fais c'est qu'au niveau du model j'instancie l'objet que je vais utiliser dans ma vue.
Je le stocke en session et donc je le serialize car c'est un objet  
quand je suis dans ma vue je le unserialize pour pouvoir le réutiliser comme un objet
mais peut etre est il plus judicieux de le passer en parametre de mes methodes ou autre?
 
près si vraiment la vue est complètement différente en fonction d'une valeur precise, mieux vaut mettre le filtre if dans le controller et utiliser différentes vues.  
C'est une vue qui est dynamique mais pas complétement différente


Message édité par schum-hacker le 18-09-2009 à 10:17:09
Reply

Marsh Posté le 18-09-2009 à 11:25:48    

pourquoi pas faire un passage en paramètre de ton objet à afficher à une fonction?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 18-09-2009 à 11:29:25    

tu ne dois stocker en session que les données qui doivent survivre d'une page à l'autre  
 
et pou rle passge d'objet , en général , je fais qq chose comme ça  

Code :
  1. class MyControler extends BaseControler{
  2.     function affiche(){
  3.           $model = $this->getModel();
  4.           $view = new MyView ($model);
  5.            $view->show();
  6.     }
  7. }


---------------

Reply

Marsh Posté le 18-09-2009 à 12:35:17    

ok merci je vais faire un passage par parametre :)
et pr le reste? sur la vue?

Reply

Marsh Posté le 18-09-2009 à 13:56:53    

il y a  des tests dans la vue, du genre , tu ne peux pas l'éviter  
par contre, il faut absolument eviter d'vaoir une requete SQL directement dans la vue  

Code :
  1. if($this->getModele()->getX() >0){
  2.  
  3. }


---------------

Reply

Marsh Posté le 18-09-2009 à 14:10:10    

ok merci
parcontre ca me fait byzarre le  
 

Code :
  1. $view = new MyView ($model);
  2.   $view->show();


j aurais penser a  
 

Code :
  1. $view = new MyView ();
  2.   $view->show($model);


???


Message édité par schum-hacker le 18-09-2009 à 14:10:31
Reply

Marsh Posté le 20-09-2009 à 10:19:45    

flo850 j ai utilisé ta facon de faire mais j ai une autre question:
ex: dans ma vu j affiche un attribut x:
toto est un objet qui compose mon objet x (la relation entre mon objet courant et toto est 0..n dans les 2 sens)
$this->getToto()-->getX();
 
le pb c'est que x existe que si  on a un objet toto
donc il faut un test genre:
if($this->getToto() != NULL)
$this->getToto()-->getX();
 
et je trouve pas ca terrible je pensais faire tous ces test dans le constructeur de ma vue en créant un objet vue avec ses propres attributs ?

Message cité 1 fois
Message édité par schum-hacker le 20-09-2009 à 10:19:54
Reply

Marsh Posté le 20-09-2009 à 22:38:52    

En même temps tu fais ce que tu veux.  
Il y a toujours moyen de faire mieux.

Reply

Marsh Posté le 20-09-2009 à 22:38:52   

Reply

Marsh Posté le 21-09-2009 à 10:03:58    

asmodaiii a écrit :

En même temps tu fais ce que tu veux.  
Il y a toujours moyen de faire mieux.


 
ben justement si t as mieux partage ;)

Reply

Marsh Posté le 21-09-2009 à 16:48:24    

schum-hacker a écrit :

flo850 j ai utilisé ta facon de faire mais j ai une autre question:
ex: dans ma vu j affiche un attribut x:
toto est un objet qui compose mon objet x (la relation entre mon objet courant et toto est 0..n dans les 2 sens)
$this->getToto()-->getX();
 
le pb c'est que x existe que si  on a un objet toto
donc il faut un test genre:
if($this->getToto() != NULL)
$this->getToto()-->getX();
 
et je trouve pas ca terrible je pensais faire tous ces test dans le constructeur de ma vue en créant un objet vue avec ses propres attributs ?


 
Je pense que l'ex était volontairement très court. Je pense que dans la pratique, l'instanciation de la vue va soit prendre un type de vue en paramètre soit c'est le nom de la classe de vue elle-même qui va définir la vue à créer  
ex :  
$view = new MyView ("VueToto" );
ou
$view = new MyTotoView();
MyTotoView héritant de la classe générique MyView.
 
De ce fait, ta vue étant spécialisée, ça va drôlement limiter le genre d'objet qu'elle va devoir manipuler...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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