Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-06-2009 18:01:18

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

[1.8] Zend_Application - Retrouver une instance db

Bonjour,

Je veux retrouver des paramètres fournies dans mon application.ini (fichier de configuration). Je me suis alors basé là-dessus :  http://framework.zend.com/manual/fr/zen … sources.db

[production]
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "webuser"
resources.db.params.password = "XXXXXXX"
resources.db.params.dbname = "test"

test = toto

Comment récupérer mon adaptateur de bases de données par exemple?
Comment récupérer l'option toto?

J'ai simplement essayé ceci :

$resource = $bootstrap->getPluginResource('db');

$db = $resource->getDbAdapter();

Et je me retrouve avec un :

Notice: Undefined variable: bootstrap in ...

Fatal_error: Call to a member function getPluginResource() on a non-object in ...



Question idiote, est-ce qu'il y a des modifs à faire sur l'appli au préable pour pouvoir accéder à ses données ??


aka miboo

Hors ligne

 

#2 09-06-2009 22:53:40

zack
Nouveau membre
Date d'inscription: 06-06-2009
Messages: 3

Re: [1.8] Zend_Application - Retrouver une instance db

Bonjour,

Pour ta 1ère question :

Si tu es dans ton fichier "bootstrap.php" :
$resourceDb = $this->getPluginResource('db');
$db = $resourceDb->getDbAdapter();
...


Si tu es dans un controlleur :
$bootstrap = $this->getInvokeArg('bootstrap');
$db = $bootstrap->getResource('db');
...


Et une solution qui fonctionne partout (sauf dans ton "bootstrap.php"):
$front = Zend_Controller_Front::getInstance();
$bootstrap = $front->getParam('bootstrap');
$db = $bootstrap->getResource('db');
...



Pour ta 2ème question :
Dans ton fichier application.ini, utilise la syntaxe suivante :
resources.test.valeur = toto

Ensuite tu crées un "gestionnaire de ressource" capable de gérer ta ressource "test" (en l'occurrence : récupérer sa valeur).
Regarde ici : http://framework.zend.com/manual/fr/zen … .resources

Pour ton exemple voici à quoi pourrait ressembler ton gestionnaire.
Mets cette classe dans un fichier nommé "Test.php" que tu placeras sous "..\Zend\Application\Resource" (c'est juste pour illustrer, il faudrait bien entendu le placer dans le répertoire de ta propre librairie.

<?php
class Zend_Application_Resource_Test extends Zend_Application_Resource_ResourceAbstract
{
    protected $_valeur = null;
   
    public function getValeur()
    {
        return $this->_valeur;
    }

    public function setValeur($valeur)
    {
        $this->_valeur = $valeur;
        return $this;
    }
   
    public function init()
    {
        return $this->getValeur();
    }
}


et dans ton fichier bootstrap.php, tu récupères la valeur "toto" en faisant :

$resourceTest = $this->getPluginResource('test');
$valeur = $resourceTest->getValeur();


Bon courage,

Zack

Dernière modification par zack (09-06-2009 22:54:34)

Hors ligne

 

#3 10-06-2009 11:14:16

throrin19
Membre
Date d'inscription: 01-03-2009
Messages: 318
Site web

Re: [1.8] Zend_Application - Retrouver une instance db

il y a aussi les registres de très utiles ^^

Hors ligne

 

#4 10-06-2009 11:14:42

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [1.8] Zend_Application - Retrouver une instance db

Merci pour cette réponse complète smile

En utilisant cette méthode :

$bootstrap = $this->getInvokeArg('bootstrap');
$db = $bootstrap->getResource('db');

Si je veux par exemple mon username, cela me donne ensuite :

$user = $db->params->username;

??

En fait c'est pour utiliser avec Zend_Auth. Faut-il vraiment passer par Zend_Application pour récupérer les paramètres de la BDD ? Pourquoi ne pas utiliser Zend_Config ?


aka miboo

Hors ligne

 

#5 10-06-2009 20:58:27

zack
Nouveau membre
Date d'inscription: 06-06-2009
Messages: 3

Re: [1.8] Zend_Application - Retrouver une instance db

L'objet $db étant une instance de la classe abstraite Zend_Db_Adapter_Pdo_Abstract, regarde les méthodes qu'elle offre.
Pour récupérer le user, tu peux faire :
$bootstrap = $this->getInvokeArg('bootstrap');
$db = $bootstrap->getResource('db');
$config = $db->getConfig();
$user = $config['username'];

Sinon, pour le choix entre Zend_Config avec un .ini classique, et le principe de bootstrap offert par Zend_Application, c'est à toi de voir. Personnellement je trouve cette dernière + modulaire et "cadrée" (principe des plugins de ressources).

Hors ligne

 

#6 14-06-2009 12:44:14

Vincent
Administrateur
Date d'inscription: 19-09-2008
Messages: 510

Re: [1.8] Zend_Application - Retrouver une instance db

Merci pour toutes ces infos. Dernières petites questions, d'une manière générale vous faites l'appel à l'objet db une seule fois et vous le stockez dans le registre ou vous faites un appel à chaque fois?


aka miboo

Hors ligne

 

#7 14-06-2009 15:08:18

squall6969
Membre
Date d'inscription: 14-09-2008
Messages: 90

Re: [1.8] Zend_Application - Retrouver une instance db

Salut miboo,

La mise en registre est inutile dans le sens ou le front controller fait déjà office de conteneur en tant que singleton.
Récupère donc l'objet via le front dans tes modèles, et pourquoi pas via getInvokeArg dans tes controllers.

++

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages