Bonjour,
Je viens de parcourir le Quick Start au sujet du Zend Framework (http://framework.zend.com/docs/quickstart) et j'ai mit en place la structure de ma future application, sur base des infos trouvées dans ce manuel.
J'ai une question "MVC" suite à la lecture de ce document ... Ce QuickStart indique qu'il est intéressant de créer une classe par table dans la DB, étendant la classe Zend_Db_Table_Abstract ; ceci permettant d'inclure certains "business models".
Jusque là d'accord ... C'est par ailleurs une pratique que je faisais déjà avant d'utiliser Zend. J'ai donc fait celà, à titre d'exemple, pour une de mes tables :
Le document préconise de sauver ce fichier dans application/models/DbTable, ce que j'ai également fait avant de poursuivre en créant une classe qui va inclure la logique métier relative à cette table ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?php class Model_DbTable_Constante extends Zend_Db_Table_Abstract { protected $_name = 'constante'; function insert(array $data) { $data['datecreation'] = date('Y-m-d H:i:s'); return parent::insert($data); } function update(array $data, $where) { $data['datemodification'] = date('Y-m-d H:i:s'); return parent::update($data); } }
J'avoue que là ... j'ai déjà des difficultés à saisir ... Si le but est de mettre en place la logique métier propre à cette table (genre, insérer des données, les mettre à jour, les récolter, etc.) : pourquoi ne pas mettre cela directement dans le fichier créé précédement ?
Autre possibilité ... que cette classe reprenant la logique métier ne soit pas forcément liée UNIQUEMENT à une table (et donc à une classe) mais à plusieurs tables ... Dans mon exemple, à ma table "constante" devrait venir s'ajouter la table "constante_c" dans laquelle je vais sauver le contenu en fonction de la langue.
Je devrais donc créer une autre classe dans /application/models/DbTable, spécifiquement pour constante_c. J'imagine ensuite que ma classe métier serait une classe permettant la mise à jour des données dans les 2 tables.
Dans ce cas, je ne vois pas comment faire puisque le doc Zend indique ceci comme exemple de code :
En gros, la fonction getTable me permet uniquement de référer à un classe de Table >> pas possible de faire de la logique métier ayant trait à 2 tables, voire plus ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 class Model_Constante { protected $_table; function getTable() { if (null === $this->_table) { require_once APPLICATION_PATH . '/models/DbTable/Db_Constante.php'; $this->_table = new Model_DbTable_Constante(); } return $this->_table; } function save(array $data) { $table = $this->getTable(); $fields = $table->info(Zend_Db_Table_Abstract::COLS); foreach ($data as $field => $value) { if (!in_array($field, $fields)) { unset($data[$field]); } } return $table->insert($data); } function fetchEntries() { return $this->getTable()->fetchAll('1')->toArray(); } }
Comment puis-je résoudre cela ?
Merci de vos conseils,
Olivier
Partager