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 :

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);
    }
 
}
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 ...

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 :

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();
	}
 
 
}
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 ...

Comment puis-je résoudre cela ?

Merci de vos conseils,
Olivier