Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 ??
Hors ligne
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
il y a aussi les registres de très utiles ^^
Hors ligne
Merci pour cette réponse complète
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 ?
Hors ligne
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
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?
Hors ligne
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
Pages: 1