Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3193 connectés 

 


 Mot :   Pseudo :  
  Aller à la page :
 
 Page :   1  2  3  4  5  ..  31  32  33  ..  62  63  64  65  66  67
Auteur Sujet :

Model View Controller (MVC) - Architecture des applications PHP

n°1593476
AlphaZone
Posté le 30-07-2007 à 18:05:34  profilanswer
 

Reprise du message précédent :
Comment t'as fait alors ?

 

EDIT : Oubliez c'que j'ai dit. J'avais pas fait attention au message plus haut... C'est le soleil du Portugal qui me fait raconter que des conneries.


Message édité par AlphaZone le 30-07-2007 à 18:09:48

---------------
"Nous avons tous nos machines du temps. Celles qui nous ramènent en arrière sont les souvenirs, celles qui nous projettent en avant sont les rêves."
mood
Publicité
Posté le 30-07-2007 à 18:05:34  profilanswer
 

n°1593481
ratibus
Posté le 30-07-2007 à 18:41:16  profilanswer
 

FlorentG a écrit :

Le plus dérangeant maintenant, c'est que ces cons n'ont même pas pensé à tout passer en exceptions...
 
On se retrouve avec un vieux mix exceptions/erreurs fatales/warning que tu sais pas trop quoi faire [:pingouino]
 
 
Exemple avec notre __autoload d'au-dessus. On peut pas y lancer une exception, donc impossible de faire une bonne gestion d'erreurs si une classe/fichier existe pas. Heureusement, il y a une parade infaillible :

Code :
  1. function __autload($className) {
  2.  if(is_file($className . '.php')) {
  3.    require $className . '.php';
  4.  } else {
  5.    eval('class ' . $className . ' { '
  6.      .  'public function __construct { '
  7.      .   'throw new Exception(\'fichier pas trouvé\'); '
  8.      .  '}'
  9.      . '}');
  10.  }
  11. }


 
Et ça roule, exception dans autoload [:dawak]


Tu peux pas faire un error handler classique dans ce cas là et qui va balancer une exception ?

n°1593491
masklinn
í dag viðrar vel til loftárása
Posté le 30-07-2007 à 19:43:26  profilanswer
 

FlorentG a écrit :

Le plus dérangeant maintenant, c'est que ces cons n'ont même pas pensé à tout passer en exceptions...
 
On se retrouve avec un vieux mix exceptions/erreurs fatales/warning que tu sais pas trop quoi faire [:pingouino]
 
 
Exemple avec notre __autoload d'au-dessus. On peut pas y lancer une exception, donc impossible de faire une bonne gestion d'erreurs si une classe/fichier existe pas. Heureusement, il y a une parade infaillible :

Code :
  1. function __autload($className) {
  2.  if(is_file($className . '.php')) {
  3.    require $className . '.php';
  4.  } else {
  5.    eval('class ' . $className . ' { '
  6.      .  'public function __construct { '
  7.      .   'throw new Exception(\'fichier pas trouvé\'); '
  8.      .  '}'
  9.      . '}');
  10.  }
  11. }


 
Et ça roule, exception dans autoload [:dawak]


I solemny and officially ask you to extract your crotch with a butter knife, for the sake of humanity you should not be allowed to reproduce.


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1593497
multani
Dépressionnisé
Posté le 30-07-2007 à 20:06:59  profilanswer
 

FlorentG a écrit :

Le plus dérangeant maintenant, c'est que ces cons n'ont même pas pensé à tout passer en exceptions...
 
On se retrouve avec un vieux mix exceptions/erreurs fatales/warning que tu sais pas trop quoi faire [:pingouino]
 
 
Exemple avec notre __autoload d'au-dessus. On peut pas y lancer une exception, donc impossible de faire une bonne gestion d'erreurs si une classe/fichier existe pas. Heureusement, il y a une parade infaillible :

Code :
  1. function __autload($className) {
  2.  if(is_file($className . '.php')) {
  3.    require $className . '.php';
  4.  } else {
  5.    eval('class ' . $className . ' { '
  6.      .  'public function __construct { '
  7.      .   'throw new Exception(\'fichier pas trouvé\'); '
  8.      .  '}'
  9.      . '}');
  10.  }
  11. }


 
Et ça roule, exception dans autoload [:dawak]


 
OH SHI-

n°1593498
supermofo
Hello World !
Posté le 30-07-2007 à 20:08:55  profilanswer
 

Juste une question a propos des proprietes d une classe.

 
Code :
  1. /**
  2.  * Global registry for the application, used to store reusable & persistent
  3.  * objects
  4.  *
  5.  * @var array
  6.  */
  7. protected static $_registry = array();
  8. /**
  9.  * Application status running or not
  10.  *
  11.  * @var bool
  12.  */
  13. protected static $_status = false;
 

C'est utile d'initialiser les propriete a un empty selon leur type ?
string  => null,
object => null,
tableau => array()

  


Message édité par supermofo le 30-07-2007 à 20:09:54

---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
n°1593499
skeye
Posté le 30-07-2007 à 20:10:56  profilanswer
 

FlorentG a écrit :

Le plus dérangeant maintenant, c'est que ces cons n'ont même pas pensé à tout passer en exceptions...

 

On se retrouve avec un vieux mix exceptions/erreurs fatales/warning que tu sais pas trop quoi faire [:pingouino]

 


Exemple avec notre __autoload d'au-dessus. On peut pas y lancer une exception, donc impossible de faire une bonne gestion d'erreurs si une classe/fichier existe pas. Heureusement, il y a une parade infaillible :

Code :
  1. function __autload($className) {
  2.  if(is_file($className . '.php')) {
  3.    require $className . '.php';
  4.  } else {
  5.    eval('class ' . $className . ' { '
  6.      .  'public function __construct { '
  7.      .   'throw new Exception(\'fichier pas trouvé\'); '
  8.      .  '}'
  9.      . '}');
  10.  }
  11. }
 

Et ça roule, exception dans autoload [:dawak]


'tain, on avait essayé de faire du code pourri exprès il y a un temps de ça en utilisant les conneries du langage, mais alors ça c'est au-delà de tout ce que j'aurais cru qu'un être humain puisse imaginer.[:pingouino]


Message édité par skeye le 30-07-2007 à 20:11:23

---------------
Can't buy what I want because it's free -
n°1593502
ratibus
Posté le 30-07-2007 à 20:34:14  profilanswer
 

Enfin là quand même, FlorentG il s'est laché :D

n°1593511
vanadium
N° Atomique : 23
Posté le 30-07-2007 à 21:45:45  profilanswer
 

Code :
  1. $i = 0;
  2. while(true) {
  3.   try {
  4.     if($i == 0) {
  5.       throw new Exception('Stop while');
  6.     }
  7.   } catch(Exception $e) {
  8.     break;
  9.   }
  10. }


 
C'est moins bien que florentG mais il faut dire que le niveau est bon ici [:dawak]

Message cité 1 fois
Message édité par vanadium le 30-07-2007 à 21:47:30
n°1593516
masklinn
í dag viðrar vel til loftárása
Posté le 30-07-2007 à 21:53:18  profilanswer
 

vanadium a écrit :

Code :
  1. $i = 0;
  2. while(true) {
  3.   try {
  4.     if($i == 0) {
  5.       throw new Exception('Stop while');
  6.     }
  7.   } catch(Exception $e) {
  8.     break;
  9.   }
  10. }
 

C'est moins bien que florentG mais il faut dire que le niveau est bon ici [:dawak]


C'est comme ça que fonctionnent les foreach en Python :o

Spoiler :

mais c'est pas une raison pour le faire en php [:pingouino]


Message édité par masklinn le 30-07-2007 à 21:53:49

---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
n°1593538
supermofo
Hello World !
Posté le 30-07-2007 à 23:35:38  profilanswer
 

Quelqu'un pourrais repondre a ma question ?
 
 
Merci


---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
mood
Publicité
Posté le 30-07-2007 à 23:35:38  profilanswer
 

n°1593568
skeye
Posté le 31-07-2007 à 08:29:09  profilanswer
 

supermofo a écrit :

Quelqu'un pourrais repondre a ma question ?
 
 
Merci


oui. Mais ça se fait dans le constructeur.:o


---------------
Can't buy what I want because it's free -
n°1594411
Dj YeLL
$question = $to_be || !$to_be;
Posté le 01-08-2007 à 15:04:19  profilanswer
 

Dj YeLL a écrit :

Y'a un truc que j'ai du mal à saisir
 
Admettons que j'appelle le contrôleur "pictures" et l'action "view"
 
Donc en gros ça inclus le fichier picturesCtrl.php, mais comment exécuter l'action "view" ?
 
Enfin plus précisément, je suppose que c'est avec un call_user_func_array, et j'arrive bien exécuter l'action, mais une fois dans la méthode, je n'arrive pas comprendre comment on peut utiliser $this, ou accéder aux variables/méthodes déjà définies.
 
J'ai un peu de mal à expliquer clairement, mais c'est justement parce que j'ai du mal à saisir le procédé exact.
 
J'ai essayé d'éplucher pas à pas la manière dont CakePhp se "déroule", mais je me paume dans les méandres de son code :/


 
 :bounce:  
 
Si mon message n'est pas assez clair, faites-le moi savoir, j'essayerai de m'expliquer autrement :o


---------------
Gamertag: CoteBlack YeLL
n°1594470
Dj YeLL
$question = $to_be || !$to_be;
Posté le 01-08-2007 à 16:04:47  profilanswer
 


 
Je crois que c'est après ça en fait que je sèche. Enfin j'appelle l'action avec un call_user_method_array() pour lui passer les paramètres supplémentaires que je récup dans l'url.
 
Enfin je vais me repencher dessus, parce que quand j'imagine le truc, j'ai tjs l'impression de comprendre, mais une fois dedans, je me paume.
 
Plus d'infos dans le prochain épisode donc :D
 
:jap:


---------------
Gamertag: CoteBlack YeLL
n°1594483
Dj YeLL
$question = $to_be || !$to_be;
Posté le 01-08-2007 à 16:21:08  profilanswer
 

 

$_GET non ?

 

En fait j'utilise pas d'url rewriting pour le moment.

 

Ça se présente plutôt comme ça :

 

http://www.monsite.com/?controller/action/var1/var2 etc...

 

Donc lors d'un MCV::init(); ça fait un explode sur les "/" de la "query_string" et ça me sors mes params

 

1er param = nom du contrôleur
2ème param = nom de l'action
params suivant = params passés à l'appel de la méthode action

 

Si aucun param n'est défini, alors contrôleur + action par défaut, et si 1 seul param, alors juste action par défaut

Message cité 1 fois
Message édité par Dj YeLL le 01-08-2007 à 16:22:58

---------------
Gamertag: CoteBlack YeLL
n°1594798
FlorentG
Posté le 02-08-2007 à 11:03:49  profilanswer
 

Dj YeLL a écrit :


 
$_GET non ?
 
En fait j'utilise pas d'url rewriting pour le moment.
 
Ça se présente plutôt comme ça :
 
http://www.monsite.com/?controller/action/var1/var2 etc...
 
Donc lors d'un MCV::init(); ça fait un explode sur les "/" de la "query_string" et ça me sors mes params
 
1er param = nom du contrôleur
2ème param = nom de l'action
params suivant = params passés à l'appel de la méthode action
 
Si aucun param n'est défini, alors contrôleur + action par défaut, et si 1 seul param, alors juste action par défaut


C'est quasiment la même chose chez moi. Ca explode, et mappe sur les paramètre de la fonction, style : /pouet/tagada/truc/bidule.html va exécuter le module pouet, le controller tagada, et la fonction :

Code :
  1. public function get($schneubeul, $schwarzenegger) {
  2.   ...
  3. }


Et on retrouve les valeurs explodées dans les paramètres. J'ai aussi la possibilité de les assigner par la query string, si jamais on a un formuaire en GET.  
 
Pour appeller la fonction, je mappe donc les paramètre linéairement, dans l'ordre d'apparition dans la signature, et un simple :

Code :
  1. $method = new ReflectionMethod($controllerClass, 'get');
  2. $method->invokeArgs($this, $args);

n°1594944
FlorentG
Posté le 02-08-2007 à 14:16:55  profilanswer
 

Bof, ça change pas énormément au final...

n°1594974
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2007 à 14:57:35  profilanswer
 

FlorentG a écrit :


C'est quasiment la même chose chez moi. Ca explode, et mappe sur les paramètre de la fonction, style : /pouet/tagada/truc/bidule.html va exécuter le module pouet, le controller tagada, et la fonction :

Code :
  1. public function get($schneubeul, $schwarzenegger) {
  2.   ...
  3. }


Et on retrouve les valeurs explodées dans les paramètres. J'ai aussi la possibilité de les assigner par la query string, si jamais on a un formuaire en GET.

 

Pour appeller la fonction, je mappe donc les paramètre linéairement, dans l'ordre d'apparition dans la signature, et un simple :

Code :
  1. $method = new ReflectionMethod($controllerClass, 'get');
  2. $method->invokeArgs($this, $args);


 

Je ne suis pas certain que ce soit de ça dont tu parles (je ne connais que très vaguement les Reflection* ) , mais en ce qui me concerne, pour passer mes paramètres à la méthode, je fais :

 
Code :
  1. call_user_method_array($this->_action, $this, $this->_url_vars);


Message édité par Dj YeLL le 02-08-2007 à 14:58:17

---------------
Gamertag: CoteBlack YeLL
n°1594983
FlorentG
Posté le 02-08-2007 à 15:09:17  profilanswer
 

C'est pareil. Mais l'API Reflection fait plus propre [:dawa]

n°1594988
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2007 à 15:13:26  profilanswer
 

FlorentG a écrit :

C'est pareil. Mais l'API Reflection fait plus propre [:dawa]


 
Permets moi de ne pas en être convaincu :D


---------------
Gamertag: CoteBlack YeLL
n°1595002
gizmo
Posté le 02-08-2007 à 15:33:07  profilanswer
 

Dj YeLL a écrit :


 
Permets moi de ne pas en être convaincu :D


Ton bousin, il renvoie une exception en cas de probleme ou bien il se crash comme une merde?
 
T'as ta reponse...

n°1595007
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2007 à 15:39:11  profilanswer
 

gizmo a écrit :


Ton bousin, il renvoie une exception en cas de probleme ou bien il se crash comme une merde?
 
T'as ta reponse...


 
En cas de problème à quel niveau ?


---------------
Gamertag: CoteBlack YeLL
n°1595038
gizmo
Posté le 02-08-2007 à 16:08:59  profilanswer
 

Dj YeLL a écrit :


 
En cas de problème à quel niveau ?


 
appelle d'une methode avec de mauvais arguments par exemple.

n°1595179
_synapse_
Posté le 02-08-2007 à 19:01:51  profilanswer
 

Heu le php c'étais pas censé être simple à la base non :o
 
Parce que plus ça va, plus on a l'impression que vous essayez de redevelopper le kernel linux en php quoi :o

n°1595180
skeye
Posté le 02-08-2007 à 19:03:19  profilanswer
 

_synapse_ a écrit :

Heu le php c'étais pas censé être simple à la base non :o
 
Parce que plus ça va, plus on a l'impression que vous essayez de redevelopper le kernel linux en php quoi :o


non, on essaye de faire les choses le plus proprement possible.


---------------
Can't buy what I want because it's free -
n°1595194
_synapse_
Posté le 02-08-2007 à 19:47:29  profilanswer
 

skeye a écrit :


non, on essaye de faire les choses le plus proprement possible.


 
Ouais enfin propre peut-être, mais au final c'est tout aussi impossible à maintenir, la preuve sur ce topic, même celui qui a développé à la base n'arrive pas trop à comprendre qu'est ce qui fait quoi  :pt1cable:

n°1595195
Dj YeLL
$question = $to_be || !$to_be;
Posté le 02-08-2007 à 19:49:52  profilanswer
 

Quoiqu'il en soit, ràb que ce soit crade ou pas, tant que c'est fonctionnel et efficace :whistle:
 
Je prétends de toute façon pas être le roi des codeurs, mais je suis assez satisfait de là où j'en suis, c'est qui importe.
 
Le tout c'est de gagner du temps sur chaque projet sur lesquels je serai amener à développer, et c'est le cas :D


---------------
Gamertag: CoteBlack YeLL
n°1595775
supermofo
Hello World !
Posté le 03-08-2007 à 22:59:19  profilanswer
 

 


Ca depend de l'architecture du framework. Moi je pourrais jamais faire de reflection, et meme si je pouvais j le ferais pas. Sauf peut etre si *un* jour l'envie me prend de developper des tests unitaires.

 



Message édité par supermofo le 03-08-2007 à 23:13:39
n°1595777
supermofo
Hello World !
Posté le 03-08-2007 à 23:00:36  profilanswer
 

gizmo a écrit :

 

appelle d'une methode avec de mauvais arguments par exemple.

 

Son bousin il est pas mauvais a mon gout  :lol: .  Pourquoi sortir les reflections, quand tu px passer par polymorphisme. A la base le probleme est d'etre compatible avec d'autres classes. Si tu codes sur des interfaces, t'as pas besoin de partir en 3d.

 

A moins d'avoir un argument beton ...


Message édité par supermofo le 03-08-2007 à 23:11:39

---------------
Echange de 3000+ liens PR 3 -> 5, me pm urgent !
n°1607388
diego_p
Posté le 03-09-2007 à 02:14:22  profilanswer
 

Bonjour,
 
je m'interesse également au mvc, pour ma part j'ai choisis une architecture avec une classe FrontController qui d'abors créer un objet Request cargé d'analyser la requête et récupèrer les paramètres, Frontcontroler va ensuite instancier le controller du module demandé qui contient toutes les actions possibles avec des méthodes qui vont instancier un modèle, une vue et renvoyer l'affichage.  
Cependant je me pose plusieurs questions notement par exemple pour une page d'accueil d'un portail qui doit afficher des données de plusieurs modules (rubriques, news etc...)  est il possible qu'une action puisse instancier plusieurs modèles, sinon comment faire ?
autre question comment implanter le code d'un menu qui apparaitrait sur tout le site ?
 
 


Message édité par diego_p le 03-09-2007 à 02:14:46
n°1608268
vanadium
N° Atomique : 23
Posté le 04-09-2007 à 21:24:41  profilanswer
 

Tu peux forcément instancier plusieurs modèles dans ton controleur, une classe modèle => mapping pour une table.
Personnellement, j'ai crée des "composants" : un composant est un bloc reutilisable est pouvant être appelé depuis n'importe ou. Par exemple, le composant "10 dernieres news" qui affiche dans un bloc les liens vers les dernieres news. Ces composants sont point de vue architecture très proche des controleurs, mais plus légers car ils ne necessitent pas de routage pour etre lancé : un simple code dans la vue suffit à afficher le composant.

n°1608328
leflos5
On est ou on est pas :)
Posté le 05-09-2007 à 03:41:25  profilanswer
 

Et là c'est le drame d'un point de vue conceptuel du MVC :spamafote:
A mon sens, une requête = une action, et cette action est une méthode d'un modèle. Comment en instancier plusieurs en même temps :??:
 
En contournant le système, et donc on est plus dans le système...
 
Sans parler des normes http : une requête GET ne modifie pas l'état du système et doit donc retourner le même résultat à chaque fois.
 
Et c'est le controleur frontal qui doit instancier en fonction de la requête, tu passes donc par le template (sous fifre de la vue) pour contourner le fait que tu puisses plus passer par le controleur :??:
 
 
C'est purement conceptuel, mais là on nage en plein délir :??:

n°1608371
c0wb0y
:d
Posté le 05-09-2007 à 10:00:05  profilanswer
 

C'est le principe utilisé par Django (framework python) également, par le biais des templatetags. C'est vrai que si l'on veut implémenter à la lettre le modèle MVC on est à coté en utilisant ce principe, mais bon, l'idée c'est quand même d'aller à la simplicité, d'être dans le "DRY", et donc à partir de là, je pense qu'on peut dire qu'il faut savoir s'écarter du modèle qui n'est peut-être pas parfait en situation réelle.
 :jap:

n°1608576
vanadium
N° Atomique : 23
Posté le 05-09-2007 à 15:47:36  profilanswer
 

Tout à fait d'accord avec c0wb0y :jap:

n°1608693
diego_p
Posté le 05-09-2007 à 21:49:50  profilanswer
 

Pour les composants communs comme le header, les rubriques, les news, le footer etc..
C'est pas mieu par exemple d'instancier plusieurs controllers dans le frontController par exemple si j'instancie celui des news, des rubriques etc j'aurais toutes les infos pour remplir et créer mon template.  
 
Ce que je ne voudrais pas c'est aussi devoir instancier les modèles dont j'ai besoins pour ces composants dans toutes mes methodes d'action ou de vue car ces composants se retrouvent dans tout le site forcément je devrait avoir les infos pour tous les templates.
 

n°1609591
leflos5
On est ou on est pas :)
Posté le 07-09-2007 à 20:43:41  profilanswer
 

Je comprends pas bien ton histoire de modèle :??:
Tu veux éxécuter une action pour récupérer des données sans instancier ce qui est censé te ramener ces données :??:
 

n°1612648
LeRiton
Posté le 18-09-2007 à 16:01:19  profilanswer
 

Bonjour à tous, le planche sur la partie Modèle / DB, ça commence à piquer un peu.

 

Le but est de disposer dans mon connecteur à la base de donnée (MySQL pour l'exemple) d'une méthode plus ou moins générique.

 

Dans mon modèle, j'appelle :

Code :
  1. return $connector->read("cars", array("id", "name" ));
 

Où $connector comprend le code suivant (socket est mon objet mysqli) :

 
Code :
  1. public function read($db_name, $fields="*", $condition="1" ) {
  2.    $statement = $this->socket->prepare("SELECT $fields FROM $db_name WHERE $condition;" );
  3.    (du code qui devrait retouner mon array de clé => résultat)
  4. }
 

Sauf que voilà, je patauge pour retourner un résultat cohérent. En effet, je ne vois pas trop comment générer un array "clé"=>"valeur" en ne conaissant pas à l'avance les champs visés par la requete.

 

J'ai regardé du côté de result_metadata() pour récupérer les noms de colonnes visées, sauf que pour constituer mon array, je dois passer par fetch(), et que cette dernière requiert un bind_result() qui dépend... du nom de mes colonnes.

 

En bref, je suis un peu paumé. Des pistes ?


Message édité par LeRiton le 18-09-2007 à 16:02:10
n°1612988
leflos5
On est ou on est pas :)
Posté le 19-09-2007 à 13:57:50  profilanswer
 

mysqli_fetch() est déprécié d'après la doc. Utilises mysqli_fetch_assoc() ça te retourne un tableau associatif donc tu as tes attributs :spamafote:

n°1614212
vanadium
N° Atomique : 23
Posté le 23-09-2007 à 12:30:41  profilanswer
 

Pourquoi ne pas utiliser un ORM comme PHPDoctrine ?
www.phpdoctrine.net
 
Très simple à utiliser, puissant et surtout très bien documenté :)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  ..  31  32  33  ..  62  63  64  65  66  67

Aller à :
Ajouter une réponse
 

Sujets relatifs
Comment créer une architecture propre et fonctionelle...[Débutant] Webdesigner a besoin d'aide pour PHP
script PHP style explorateur windowsPHP et MS SQL
[PHP] envoi d'images qui se dimentionne et s'ajoute direct sur 1pageAfficher le temps utilisé pour générer une page PHP
[PHP] connexion bdd différente selon page locale ou sur serveur ?Afficher une image générée par un script PHP dans un PDF ?
Utilisation d'une variable en Flash depuis PHPErreur de forum PHP
Plus de sujets relatifs à : Model View Controller (MVC) - Architecture des applications PHP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)