IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

[Zend_Db] MVC: Une classe métier dans "Model"


Sujet :

Zend_Db PHP

  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Par défaut [Zend_Db] MVC: Une classe métier dans "Model"
    Bonjour,

    Je crée un site web en utilisant Zend et le modèle MVC.
    Je veux utiliser des classes métier dans Model.
    Actuellement, je peux créer des classes à partir de la base de données.
    c'est à dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    class User extends Zend_Db_Table
    {
        protected $_name = 'user';
    }
    NB: "user" c'est une table dans la base de données.

    Mon problème c'est :
    Je met tous mon code dans le contrôleur IndexControlleur: ajouterAction, supprimerAction,....
    Ce qui a rendu la page IndexControlleur.php très volumineuse. En plus, je copie les même requêtes dans chaque fonction.
    Alors, Je veux créer une classe métier contenant les fonctions d'ajout, de suppression, et de modifier. Et dans chaque fonction sa requête spécifique, pour diminuer la taille du contrôleur et pour qu'il ne permet que d'afficher les vues.
    Comment faire ça?
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de yosraisi
    Inscrit en
    Février 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 136

  3. #3
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Salut,

    Tu peux faire ça très simplement. Un exemple :
    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
    class Member extends Zend_Db_Table_Abstract
    	{
     
    		protected $_name = 'member';
       		protected $_primary = 'id';
     
                    public function getMemberById($id_member)
                    {
     
                        $db = $this->getAdapter();
     
       			$query = $db->select()
       						->from( array("m" => "member" )) 
       						->joinLeft( array("g" => "group"), "m.id_group = g.id" , array( "g.name as group_name, g.admin_blog, g.admin_forum, g.admin_folder, g.admin_guest, g.admin_member, g.admin_group" ) )				
       						->where( $db->quoteInto( "m.id = ?", $id ) );
     
       			return $db->fetchRow($query);
     
                        }
    }
    Bien sur, tu changes la requête en fonction du résultat souhaité.

    Bon courage.

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Par défaut
    Merci beaucoup Janitrix pour votre aide.
    Mais, s'il vous plais, comment je dois appeler cette fonction dans le "IndexController" ?

  5. #5
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    C'est très simple si vous connaissez la programmation orienté objet

    Dans votre fichier IndexController.php :
    $memberAdapter = new Member();
    $member = $memberAdapter->getMemberById(5);
    L'objet $member est du type stdClass, qui dispose de variables au nom des champs de la table. Par exemple, si dans la table member, vous avez un champ name, vous pouvez récupérer le nom du membre retourné par la fonction en faisant
    $name = $member->name;
    Bien sûr, tout cela est à adapter à votre code.

    Bon courage.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Par défaut
    Merci beaucoup pour votre réponse.
    J'ai essayer de faire ça pas mal de fois mais j'ai pas arrivé.
    Excuse moi, je n'ai pas encore compris le principe.
    SVP, explique moi plus .

  7. #7
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Par défaut
    Par exemple:
    voici mon application au début:

    Model/Album.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    class Album extends Zend_Db_Table_Abstract
    {
        protected $_name = 'album';
    }
    Controller/IndexController.php
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
     
    class IndexController extends Zend_Controller_Action 
    {
    	function init()
        {
    		$this->initView();
    		Zend_Loader::loadClass('Album');
    		$this->view->baseUrl = $this->_request->getBaseUrl();
        }
     
        function indexAction()
        {
    	    $this->view->title = "Mes albums";
    	    $req="select * from album";
    	    $this->view->albums = $album->fetchAll($req);
        }
     
        function ajouterAction()
        {
    	$album = new Album();
            $this->view->title = "Ajouter un nouvel album";
     
            if ($this->_request->isPost()) {
                Zend_Loader::loadClass('Zend_Filter_StripTags');
                $filter = new Zend_Filter_StripTags();
     
                $artist = $filter->filter($this->_request->getPost('artist'));
                $artist = trim($artist);
                $title = trim($filter->filter($this->_request->getPost('title')));
     
                if ($artist != '' && $title != '') {
                    $data = array(
        		     'artist' => $artist,
        		     'title'  => $title,
        		 );
        		 $album = new Album();
        		 $album->insert($data);
     
                    $this->_redirect('/');
                    return;
                }
            } 
     
            $this->view->album = $album->createRow();
        }
    View/ajouter.html
    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
    <?php echo $this->render('header.html'); ?>
    <h1><?php echo $this->escape($this->title); ?></h1>
    <form action="<?php echo $this->baseUrl ?>/index/<?php 
        echo $this->action; ?>" method="post">
    	<?php echo $this->escape($this->msg); ?>
    <div>
        <label for="artist">Artiste</label>
        <input type="text" name="artist" 
            value="<?php echo $this->escape(trim($this->album->artist));?>"/>
    </div>
    <div>
        <label for="title">Titre</label>
        <input type="text" name="title" 
            value="<?php echo $this->escape($this->album->title);?>"/>
    </div>
     
    <div id="formbutton">
    <input type="hidden" name="id" value="<?php echo $this->album->id; ?>" />
    <input type="submit" name="add" 
        value="<?php echo $this->escape($this->buttonText); ?>" />
    </div>
    </form>
    <?php echo $this->render('footer.html'); ?>
    Alors comment ça devient?

  8. #8
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 127
    Par défaut
    Est ce que ça devient comme ça?:

    Model/Album.php
    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
    <?php
    class Album extends Zend_Db_Table_Abstract
    {
            protected $_name = 'album';
    	protected $_primary = 'id';
     
        public function afficher_album()
    {
         $db = $this->getAdapter();
         $req="select * from album";
         return  $db->fetchAll($req);
    }
     
        public function ajouter($artiste, $title)
        {
    		$db = $this->getAdapter();
       		$data = array(
        		     'artist' => $artist,
        		     'title'  => $title,
        		 );
        		 $this->insert($data);
    	}
    }

    Controller/IndexController.php
    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
    34
    35
    36
    37
    38
    39
    40
    <?php
     
    class IndexController extends Zend_Controller_Action 
    {
    	function init()
        {
    		$this->initView();
    		Zend_Loader::loadClass('Album');
    		$this->view->baseUrl = $this->_request->getBaseUrl();
        }
     
        function indexAction()
        {
    	    $this->view->title = "Mes albums";
    	    $album = new Album();
    	    $album->afficher_album();
        }
     
        function ajouterAction()
        {
    	$album = new Album();
            $this->view->title = "Ajouter un nouvel album";
     
            if ($this->_request->isPost()) {
                Zend_Loader::loadClass('Zend_Filter_StripTags');
                $filter = new Zend_Filter_StripTags();
     
                $artist = $filter->filter($this->_request->getPost('artist'));
                $artist = trim($artist);
                $title = trim($filter->filter($this->_request->getPost('title')));
     
                if ($artist != '' && $title != '') {
                    $album->ajouter();
                    $this->_redirect('/');
                    return;
                }
            } 
     
            $this->view->album = $album->createRow();
        }
    View/ajouter.html
    normalement ne change pas. Non?

    Est ce que c'est juste ça?
    Merci d'avance.

Discussions similaires

  1. winEvent dans une classe métier
    Par Niak74 dans le forum Qt
    Réponses: 0
    Dernier message: 25/02/2010, 10h53
  2. Réponses: 4
    Dernier message: 08/03/2006, 19h07
  3. Réponses: 4
    Dernier message: 08/11/2005, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo