MVC, quelques questions.

ViPHP
ViPHP | 4674 Messages

12 juil. 2007, 14:52

Bonjour :)

Je m'intéresse beaucoup à MVC et j'ai étudié quelques modèles.
En particulier celui de ZF (Zend Framework).

Une chose me turlupine : où sont les modèles ?

Le contrôleur frontale dispatche les requêtes. Pour domain.tld/module/page, on a le contrôleur moduleController et l'action pageAction qui sont instancés et appelés. Ces derniers renvoient un viewRender. Ok, mais où est le model dans tout ça ?

Ce que je comprends, c'est que le modèle est en fait moduleController et pageAction non ?

Le contrôleur frontale est censé appelé le modèle, et le "compiler" avec la vue (qui est appelée en sortie). Donc ici, le modèle serait moduleController et pageAction. Du moins, c'est ce que je comprends.

Pouvez-vous m'éclairer ? :)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 19672 Messages

12 juil. 2007, 15:44

Ce que tu mettras dans les modèles selon l'architecture du Zend Framework, ce sont des dataobjects, des extensions où seront par exemple des informations particulières sur une table donnée, son nom, le nom de sa (ses?) clé(s) primaire(s), les clés étrangères et les tables liées. Éventuellement, tu y mettras aussi certaines requêtes particulières trop complexes pour être construites facilement avec le système.

Exemple de code que tu pourrais avoir dans un modèle :
<?php
/**
 * Classe étendue de Zend_Db_Table_Abstract
 * pour la table categorie
 *
 * @package DAO
 */
class Categorie extends Zend_Db_Table_Abstract
{
    /**
     * Nom du schema.
     * @var String
     */
    protected $_name            = 'categorie';
    /**
     * Nom de la clé primaire.
     * @var String
     */
    protected $_primary         = array('cat_id');
    /**
     * Dépendances des tables liées.
     * @var Array
     */
    protected $_referenceMap    = array(
        'Rubrique' => array(
            'columns'           => array('rub_id'),
            'refTableClass'     => 'Rubrique',
            'refColumns'        => array('rub_id')
        )
    );
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 4674 Messages

12 juil. 2007, 16:02

Donc le contrôleur frontal (dans le cas de ZF) n'appelle a aucun moment les modèles.
En revanche, les autres contrôleurs (moduleController par exemple) peuvent appeler les modèles pour leur fonctionnement ?

Question de conception également : est-ce qu'un contrôleur non-frontal peut rappeler le contrôleur frontal (on rentrera dans une boucle ou une récursivité) ? Dans le ZF il me semble que c'est possible, puisque le dispatch est une boucle avec un plugin broker. Mais est-ce que c'est une bonne idée, ie. vraiment utile ?

Merci.

Edit : Est-ce qu'on doit inclure la localisation, traduction, connexion au base etc., dans le MVC ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 19672 Messages

12 juil. 2007, 18:40

Je suis encore très loin de maîtriser l'animal. Je te recommande le forum de la communauté francophone du Zend Framework où quelques pointures en la matière circulent. Le sujet a déjà plus ou moins été abordé aussi. Tu devrais y trouver des pistes de réponse.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 4674 Messages

12 juil. 2007, 18:44

Merci Cyrano :)
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).