Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
j'utilise le fichier de config pour initialiser ma ressource "db":
resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "baz" resources.db.params.password = "" resources.db.params.dbname = "bar" resources.db.isDefaultTableAdapter = true
Tout fonctionne.
cependant, si je définis dans mon Bootstrap une méthode _initDb:
protected function _initDb () { $db = $this->getPluginResource('db')->getDbAdapter(); $db->query('SET NAMES "UTF8"'); // pas de return }
la ligne de conf "resources.db.isDefaultTableAdapter = true" ne semble plus être prise en compte.
Si je nomme ma méthode _initFoo au lieu de _initDb, le problème ne se pose plus.
Ce comportement est-il intentionnel selon vous ?
Si oui, je ne comprends pas pourquoi seulement certains éléments de la config sont overridés.
Merci d'avance,
Rollie-T
Dernière modification par Mr.MoOx (14-08-2009 09:10:17)
Hors ligne
En fait, la ressource "db" est une ressource déjà présente dans Zend Framework.
En écrivant une méthode _initDb tu crées ta propre ressources, tu écrases ce db existant. C'est pourquoi il est préférable de créer une méthode avec un autre nom. j'ai eu moi aussi ce problème
C'est aussi pourquoi tous les éléments ne sont pas overridés, ne sont overridés que ceux qui existent déjà
Hors ligne
N'est-il pas intéressant, dans un tel cas, de surcharger la classe Zend_Application_Resource_Db et de redéfinir les méthodes getDbAdapter() ou init() pour ajouter le "SET NAMES" dans la foulée de la création de l'objet (qui bénéficie dès lors des informations du fichier de configuration) ?
Sinon pour ajouter un complément d'informations, les méthodes _init*() se déclenchant avant les plugins de ressources il faut, si l'on veut bénéficier du plugin de ressource 'db' existant, opter pour ce type d'approche je pense :
protected function _initDbMore() { // Permet l'instanciation de l'adapter via le plugin. // Sans cette ligne la suivante ramènerait la resource sans l'objet instancié $this->bootstrap('db'); $db = $this->getPluginResource('db'); }
Dernière modification par Eureka (14-08-2009 10:22:10)
Hors ligne
Pages: 1