[[utiliser_un_model_depuis_un_controleur]]

Utiliser un model depuis un controleur

Les modèles (tout comme les vues) doivent être séparés des controleurs. Toute la partie du code concernant la séléction où la modification des données dans la base ne se fera donc pas au niveau des controleurs, mais plutôt au niveau des modèles. Lorsqu’un controleur aura besoin de certaines données, il passera donc par un modèle, au lieu d’aller les chercher lui même.

Cette séparation peut paraitre assez “lourde” à première vue, mais croyez moi, ca en vaut la peine.

La plupart du temps, on crée un modèle par table présente dans la base. Le mieux est de prendre un exemple. Imaginons une table personnes servant à stocker des personnes… :

CREATE TABLE presonne (
    id INT NOT NULL AUTO_INCREMENT,
    nom VARCHAR (50) NOT NULL ,
    PRIMARY KEY (id)
);

Puis un Modèle : PersonneModel (dans Models/PersonneModel.php) :

<?php
require_once FRAMEWORK_DIR.'SQLObject.php';

class PersonneModel extends SQLObject {

    function PersonneModel($fields = array()) {
        parent::SQLObject('aliment', __CLASS__, $fields);
    }
}
?>

Notre modèle hérite de la classe SQLObjet. Ceci nous permet de ne pas avoir à gérer la connexion et la base, et cela nous donne également accès à toute une série de méthodes bien pratiques (je vous conseille de regarder les sources de SQLObject.php).

Créons maintenant le controleur qui va utiliser PersonneModel (dans Controllers/PersonneController.php) :

<?php
require_once 'SiteBaseController.php';
require_once MODELS_DIR.'PersonneModel.php';

class PersonneController extends SiteBaseController {

    function listeAction() {
        // créer un modèle PersonneModel
        $personne = new PersonneModel();
        // défini l'attribut nom du modèle comme étant égale à toto
        $personne->set('nom', 'toto');
        // sauve l'état du modèle dans la base
        $personne->save();

        // recupère un itérateur sur la liste des personnes dans la base
        $i = $personne->findAll();
        // puis passe l'itérateur au template pour qu'il puisse afficher cette liste
        $this->template->set('personnes', $i);

        return $this->template->toHtml();
    }
}
?>

Puis le template associé (dans View/Personne/liste.php) :

<h1>liste des personnes</h1>
 <?php while($personne = $personnes->next()) {?>
    <p><?= $personne['nom'] ?></p>
<?php } ?>

Le résultat devrait être visible là (adaptez l’url à votre configuration) : http://localhost/framework_0.1/app/public/index.php?Personne/liste

utiliser_un_model_depuis_un_controleur.txt · Last modified: 2004/10/16 19:25
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki