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 Framework PHP Discussion :

accessibilité et Propagation de $DB


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut accessibilité et Propagation de $DB
    Bonjour a tous et un grand bravo a ce forum car je trouve ici plein d'information utile a la compréhension de ZF.
    je viens de commencer mon apprentissage de ZF et j ai donc réalisé le tuto "débuter avec ZF 1.10 de Rob Allen".
    Après avoir fait ce tuto j ai voulu voir si je pouvais faire moi même mes requêtes a la main du genre:

    que je place dans application/model/artiste.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class Application_Model_Artiste extends Zend_Db_Table
    {
        public function listArtiste()
        {
            $result = $db->query('SELECT artiste FROM albums');
            $data =  $result->fetchAll();
            return $data;
        }
    }
    et la contre tout attente j ai un message d'erreur me disant que query n'est pas un objet donc j en déduit $db que je pensait avoir initialiser dans application.ini n'est accessible de partout dans l application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ; connexion à une base de données
    resources.db.adapter = PDO_MYSQL
    resources.db.params.host = localhost
    resources.db.params.username = root
    resources.db.params.password =
    resources.db.params.dbname = toto
    Donc pour résoudre ça j'ai fait la chose suivante

    Dans public/index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $params = array (   'host'     => 'localhost',
                        'username' => 'root',
                        'password' => '',
                        'dbname'   => 'toto'
    );
    $db = Zend_Db::factory('PDO_MYSQL', $params);
    Zend_Registry::set('db', $db);
    Dans application/model/artiste.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Application_Model_Artiste extends Zend_Db_Table
    {
        public function listArtiste()
        {
            $db=Zend_Registry::get('db');
            $result = $db->query('SELECT artiste FROM albums');
            $data =  $result->fetchAll();
            return $data;
        }
    }
    Dans le controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $artistee = new Application_Model_Artiste();
    $rows = $artistee->listArtiste();
    $this->view->lesArtistes = $rows;
    et dans la vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php foreach($this->lesArtistes as $artiste) : ?>
       <?php echo $artiste['artiste']."<br>"; ?>
    <?php endforeach; ?>

    Ma première question est ce une bonne chose d'écrire soit même les requêtes. En fait j'ai peur d'etre limiter si je me sers des objets disponibles.

    Ma deuxième question: est ce la bonne méthode pour rendre accessible dans toute l application $db car avec cette méthode je suis obligé de l appeler a chaque fois avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db=Zend_Registry::get('db');
    Par avance merci de toute vos remarques
    Séb

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Bonjour,

    Pour ta première question, je pense qu'il vaut mieux prendre l'habitude de construire soi même ses requêtes en effet : ça permet d'avoir la main sur ce que tu fais, et d'éviter de multiplier les requêtes là où une seule aurait suffit.

    Pour le reste, le Quickstart du Zend Framework est un peu velu pour un débutant (un comble, on en conviendra...), mais je te conseille de t'en inspirer : http://framework.zend.com/manual/en/...art.intro.html

    Pour répondre à ta deuxième question, à la condition de déclarer un Adapter par défaut pour les Zend_Db_Table, tu peux accéder à ton objet $db depuis toute instance d'un objet Zend_Db_Table grâce à la méthode getAdapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Application_Model_Artiste extends Zend_Db_Table
    {
        public function listArtiste()
        {
            $db = $this->getAdapter();
            $result = $db->query('SELECT artiste FROM albums');
            $data =  $result->fetchAll();
            return $data;
        }
    }
    Je peux me tromper, mais vu que tu as configuré la ressource db dans ton fichier .ini, je pense que la définition de l'adapter par défaut a déjà été faite lors du bootstrap.

    Plus d'informations ici : http://framework.zend.com/manual/en/zend.db.table.html

  3. #3
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    J'ai eu quelque problème avec les requête dans une application alors essai de travailler avec les objets zend, le moment ou tu sera coincé utilise des requête.

    pour la deuxième question j'ai chercher et j'ai pas trouver des réponse j'appele avec $db = $this->getAdapter("dbAdapter");

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         public function listArtiste()
        {
            $db = $this->getAdapter("dbAdapter");
            $result = $db->query('SELECT artiste FROM albums');
            return    $db->fetchAll($result);
        }
    et tu pourra utiliser fetchCol dans ton exemple pour ne pas avoir un array à 2 dimension.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    merci pour vos réponse,

    donc pour ce qui est des requêtes je pense que je vais faire appel quand c'est possible au objet présent, et quand je bloquerais j'écrirais moi même mes requêtes

    pour ce qui de seconde question j ai un avancé en ammeliorant un peu mon code,
    premièrement j ai supprimé la déclaration de zend_db dans index.php que j ai ajouté dans le bootstrap.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
    protected function _initDefaultAdaptater()
        {
     
            $config = new Zend_Config_Ini(APPLICATION_PATH . '\configs\application.ini', 'testing');
            $params = array (   'host'     => $config->resources->db->params->host,
                                'username' => $config->resources->db->params->username,
                                'password' => '',
                                'dbname'   => $config->resources->db->params->dbname
            );
     
     
            $db = Zend_Db::factory('PDO_MYSQL', $params);
            Zend_Registry::set('db', $db);
     
     
     
        }
    ce qui est mieux car j 'utilise les infos declatrées dans .ini grâce a
    $config = new Zend_Config_Ini(APPLICATION_PATH . '\configs\application.ini', 'testing');
    $config->resources->db->params->host
    etc.....

    en espérant que ca servira a des developpeurs

    a++
    Séb

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Par défaut
    c'est encore moi

    je crois que j'ai trouvé encore mieux je supprime la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected function _initDefaultAdaptater(
    ) dans le bootstrap.php.

    puis j'ai ajoute ceci dans mon .ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resources.db.isDefaultTableAdapter = true
    et dans le modèle je récupère $db de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = Zend_Db_Table::getDefaultAdapter();
    qu'en pensez vous ?

Discussions similaires

  1. Propagation d'un motif sur une texture . ?
    Par Clad3 dans le forum OpenGL
    Réponses: 8
    Dernier message: 03/06/2005, 16h53
  2. Propager un querystring
    Par Giill dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/01/2005, 14h54
  3. [C#] Problème "Accessibilité incohérente"
    Par Oberown dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/11/2004, 15h52
  4. Réponses: 3
    Dernier message: 28/09/2004, 16h39
  5. Wait cursor et accessibilité des menus
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 23/09/2004, 19h01

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