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 :

Récupérer connexion à la base de données dans IndexController [ZF 1.8]


Sujet :

Zend_Db PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut Récupérer connexion à la base de données dans IndexController
    Bonjour,

    Voici une partie de mon script index.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    $config = new Zend_Config_Ini('config.ini','dev');
    $db = Zend_Db::factory($config->database);
    Zend_Db_Table_Abstract::setDefaultAdapter($db);
    $db->getConnection();
    Zend_Db_Table::setDefaultAdapter($db);
     
    $query = "SELECT login, password FROM matable";
    $result = $db->fetchAll($query);
    Zend_Debug::dump($result);
    ...
    Ce code fonctionne correctement et affiche le contenu de matable sous forme de tableau mais, comme il se doit, je voudrais transferer les 3 dernieres lignes de code dans IndexController.php
    J'ai donc commence a coder la structure suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    class IndexController extends Zend_Controller_Action {
    ...
    function matableAction() {
       $query = "SELECT login, password FROM matable"; 
       $result = $db->fetchAll($query);
       Zend_Debug::dump($result);
    }
    ...
    J'obtiens l'erreur suivante:
    Notice: Undefined property: IndexController::$db in C:\..\application\controllers\IndexController.php on line..
    Que dois-je faire pour que l'objet $db soit visible dans IndexController ?

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonsoir,

    je vois deux solutions avec le ZF :
    • utiliser Zend_Db::getDefaultAdapter()
    • ultiliser Zend_Registry (enregistrement de la BDD dans le bootstrap et récupération dans le contrôleur)


    Mais, comme il se doit, ça ne devrait pas être fait dans le contrôleur mais plutôt dans le modèle

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Par défaut
    Bonjour,
    Si je comprend bien il est preferable de proceder a l'extraction des donnees dans le model plutot que dans le controller soit la solution appliquee suivante en transferant les 3 dernieres lignes de index.php dans:

    .../application/models/tableLogin.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    class tableLogin extends Zend_Db_Table_Abstract
    {
    protected $_name = 'matable';
    protected $_primary = array('login');
     
    public function findLogin() {
                          $query = "SELECT login, password FROM matable";
                          $result = $this->getAdapter()->fetchAll($query);
                          return $result;
      }
    }
    Le controller recupere les donnees de la maniere suivante:

    .../application/controllers/indexController.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...    
    function matableAction() {
            Zend_Loader::loadClass('tableLogin');
            $table = new tableLogin;
            $this->view->result = $table->findLogin();
       }
    ...
    L'affichage se faisant par Zend_Debug::dump($this->result); dans mon .phtml.

    Ok tout fonctionne.
    Comme je suis plutot novice et plutot perfectionniste j'aimerais savoir si la methode appliquee est ad'hoc ou s'il existe une methode plus simple et plus efficace...
    Le but de ma question n'est pas sans sous entendu car je suis extremement etonne par le temps utilise pour obtenir la reponse.

    Quand j'utilise PHP sans Zend Framework le processus
    Appel de la table
    Ouverture de la table
    Verification des droits
    Extraction des donnees
    Affichage
    le resultat est quasi instantane.

    Quand j'utilise PHP avec Zend Framework
    le resultat s'affiche apres environ cinq secondes. et je reprends la main apres environ huit secondes.

    Dois-je systematiquement m'attendre a des temps de reactions aussi long lorsque j'utilise Zend ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 502
    Par défaut
    J'ai des temps encore plus long avec DB2, si tu arrives à trouver le plus rapide, je suis preneur de ta méthode.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    Sur la question de la façon de faire la requête, comme ton modèle étend Zend_Db_Table_Abstract tu peux directement écrire dans ton action $table->fetchAll().
    Zend te renverra un rowset en générant le sélect tout seul comme un grand

    Pour ce qui est des performances, il y a beaucoup de chose à apprendre et beaucoup de temps à gagner en cherchant un peu sur le net (http://framework.zend.com/manual/fr/performance.html comme point de départ).

    Pour info, nous avons dans ma boîte une appli qui exécute au bas mot un bon millier de select et les pages s'affichent en 350ms sur mon poste ubuntu, à peu près 1s depuis serveur dédié distant et 3.5/4s sur serveur mutualisé distant.
    Donc, ne t'inquiète pas, tu n'auras pas toujours ce type de temps de réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Connexion à la base de données dans phpmyadmin ?
    Par Debutant10 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 30/06/2020, 20h50
  2. [PHP 5.2] POO et connexion à une base de données dans une fonction
    Par tolwin dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2012, 11h39
  3. [PDO] et connexion à une base de données dans une fonction
    Par ksper92 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/11/2012, 09h28
  4. Paramètres de connexion à une base de données dans un fichier xml
    Par Davesique dans le forum Persistance des données
    Réponses: 1
    Dernier message: 17/11/2010, 22h09
  5. Réponses: 1
    Dernier message: 07/04/2010, 23h50

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