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

  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 : 42
    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 : 39
    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