Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour
Je suivais pas à pas le tutorial Quickstart du site officiel de ZF et arrivé sur la partie qui me trouble toujours un peu dans ce framework le Model et son semblant d'ORM, je me suis heurté à la façon dont dans cet exemple là, ils mettent en place le model Zend_Db qui se trouvent donc le repertoir models qui lui même comporte un sous repertoire Dbtable, si je comprend bien, quelqu'un serai capable de m'apporter ces lanternes pour que je puisse faire un éclairage sur les classes du model
rep models:
Default_Model_UneTable
Default_Model_UneTableMapper
et
sous rep DbTable:
Default_Model_DbTable_UneTable extends Zend_Db_Table_Abstract
Merci d'avance
Phife
Hors ligne
Bonjour
Voici quelques explications :
Le fichier UneTable.php, contenant Default_Model_DbTable_UneTable extends Zend_Db_Table_Abstract, et se trouvant dans /models/DbTable, est celui qui fait le lien direct avec la base de données : tu y indiques par des attributs protected le nom de la table, la clé primaire, les dépendances, etc.
Le fichier UneTable.php contenant Default_Model_UneTable, se trouvant dans /models, est ce qui s'apparente à un Bean en Java, c'est à dire ton objet entité avec ses attributs, ses getters et ses setters. Tu peux également y définir d'autres méthodes, par exemple dans le tutoriel Quickstart ils définissent entre autres la méthode save(). Cette méthode contient un appel au Mapper de ta classe bean.
Ton Default_Model_UneTableMapper, dans le repertoire /models aussi, contient le corps des fonctions que tu définis dans ton bean : le bean, dans la méthode save(), fait un appel au Mapper, et c'est le mapper qui va se charger d'effectuer la requete, en définissant la méthode save() de manière précise
Voilà j'espere que c'est assez clair^^
Bon courage
Hors ligne
Merci pour l'explication je trouve cette méthode d'organisation de l'ORM plutot claire et logique je sais qu'il y a autant de façon d'organiser ZendDb que de Dev Zend Fmwk, mais un jour il va falloir que ce Fmwk propose au minimum une organisation standard de cet ORM et je dis bien propose (pour rester dans la philosophie de Zf ) ... Apres libre à chacun des dev individuellement d'organiser ça comme ils veulent voir de mettre un doctrine ou un propel à la place...
Hors ligne
c'est aussi mon avis, cette architecture permet de ne pas tout mélanger. Apres, proposer des standards ca ne plait pas toujours a tout le monde...
Hors ligne
il existe une organisation standard a priori.
Hors ligne
nORKy a écrit:
il existe une organisation standard a priori.
laquelle ? car le quickstart ne propose pas la meme architecture que d'autres tutoriaux, certains projets n'utilisent pas de Mapper et codent directement les requetes a la base dans les objets type bean.
Hors ligne
Justement est ce coder les requetes directement dans des objets de type bean voir meme comme dans certains tutoriaux dans les extensions de zend_db_table_abstract est une bonne chose?
La vision du quickstart me parait être bonen parce qu'elle sépare les logiques métiers du mapping etc...
Hors ligne
Le seul intéret que je vois à une organisation plus moin standard c'est que réellement d'un projet à l'autre mais aussi d'un tuto à l'autre il y a autant d efaçon d'organiser le model en ZF... je vais adopté la vision du Quickstart pour ma part... meme si dans la pratique pluggé doctrine sur Zf me parait plus aisé, mais ça c'est juste une question d'habitude...
Hors ligne
A mon avis aussi le principe d'utiliser un Mapper permet de coder plus proprement
Hors ligne
Oui je viens de bien comprendre l'utilité de cette archi du model et je trouve ça logique et propre de coder comme ça...
au passage quelqu'un se plaignait du nombre de ligne dans le mapper et le model métier je crois.... un petit tour dans les classes générés automatiquement par doctrine ou propel ça devrai rasurer
Hors ligne
Personnellement, je ne vois toujours pas pourquoi on devrait coder le fonctionnement du Mapper dans la classe elle même (répétition du même code dans tous les autres Mapper).
protected $_dbTable; public function setDbTable($dbTable) { if (is_string($dbTable)) { $dbTable = new $dbTable(); } if (!$dbTable instanceof Zend_Db_Table_Abstract) { throw new Exception('Invalid table data gateway provided'); } $this->_dbTable = $dbTable; return $this; } public function getDbTable() { if (null === $this->_dbTable) { $this->setDbTable('Default_Model_DbTable_Guestbook'); } return $this->_dbTable; }
Comme je l'avais évoqué dans un post sur ce sujet, toute les classes Mapper devrait hériter d'un classe parente qui gère son fonctionnement.
Hors ligne
Pages: 1