Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour.
Je débute avec ZF et j'ai un soucis pour accéder à ma base de données.
Dans mon bootstrap j'ai ceci :
try { $db = Zend_Db::factory($config->database); $db->getConnection(); Zend_Db_Table::setDefaultAdapter($db); } catch (Zend_Db_Adapter_Exception $e) { $log->log($e, Zend_Log::EMERG); } catch (Zend_Exception $e) { $log->log($e, Zend_Log::EMERG); }
La connexion semble bien s'effectuer car aucun log n'est enregistré. Si j'indique un paramètre incorrect de BDD, un log est enregistré.
Dans la classe de models/Direct.php j'ai ceci :
<?php class Direct extends Zend_Db_Table_Abstract { protected $_name = 'direct'; protected $_primary = 'id'; }
Dans mon controller j'ai ceci :
public function indexAction() { new Direct(); }
Quand j'ouvre la page dans mon navigateur j'ai l'erreur suivante :
Une erreur est survenue Application error Information relative � l'exception: Message: No adapter found for Direct Trace d'ex�cution: #0 /home/directve/sd/dev-demo/www/library/Zend/Db/Table/Abstract.php(739): Zend_Db_Table_Abstract->_setupDatabaseAdapter() #1 /home/directve/sd/dev-demo/www/library/Zend/Db/Table/Abstract.php(268): Zend_Db_Table_Abstract->_setup() #2 /home/directve/sd/dev-demo/www/application/controllers/IndexController.php(17): Zend_Db_Table_Abstract->__construct() #3 /home/directve/sd/dev-demo/www/library/Zend/Controller/Action.php(513): IndexController->indexAction() #4 /home/directve/sd/dev-demo/www/library/Zend/Controller/Dispatcher/Standard.php(289): Zend_Controller_Action->dispatch('indexAction') #5 /home/directve/sd/dev-demo/www/library/Zend/Controller/Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #6 /home/directve/sd/dev-demo/www/library/Zend/Controller/Front.php(212): Zend_Controller_Front->dispatch() #7 /home/directve/sd/dev-demo/www/application/bootstrap.php(32): Zend_Controller_Front::run('/home/directve/...') #8 /home/directve/sd/dev-demo/www/public/index.php(2): require('/home/directve/...') #9 {main} Param�tres de la requ�te: array(3) { ["controller"]=> string(5) "index" ["action"]=> string(5) "index" ["module"]=> string(7) "default" }
Savez-vous d'où provient l'erreur ?
J'ai regardé plusieurs exemples de codes sur Internet sans succès.
Merci d'avance pour vos retours.
Hors ligne
Salut,
Je pense que tu as oublié de signaler que $db est l'adapteur par défaut.
http://framework.zend.com/manual/fr/zen … lt-adapter
Hors ligne
Merci de votre réponse. Malheureusement j'ai effectué la modification dans mon fichier application/bootstrap.php en faisant ce que vous dites :
try { $db = Zend_Db::factory($config->database); $db->getConnection(); Zend_Db_Table_Abstract::setDefaultAdapter($db); /*Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db);*/ } catch (Zend_Db_Adapter_Exception $e) { // probablement mauvais identifiants, // ou alors le SGBD n'est pas joignable $log->log($e, Zend_Log::EMERG); } catch (Zend_Exception $e) { // probablement que factory() n'a pas réussi à charger // la classe de l'adaptateur demandé $log->log($e, Zend_Log::EMERG); }
Malheureusement j'ai toujours le même message d'erreur.
Pour information, le fichier application/bootstrap.php est inclus dans le fichier public/index.php
Hors ligne
En fait j'ai l'impression que ces lignes déclarées dans bootstrap.php (inclus dans index.php) ne sont pas reconnue dans application/controllers/IndexController.php
Hors ligne
Si ta classe est dans models/, elle doit être préfixée par l'arborescence : dans ton cas Model_Direct, et peut être même le nom du module avant, si tu as une architecture modulaire.
Par exemple si tu es dans /module1/models, ta classe doit s'appeler Module1_Model_Direct, et se trouver dans un fichier direct.php
j'espère que ça pourra t'aider
Hors ligne
Merci de ton retour. Je regarde ça ce soir et je te tiens au courant.
Encore merci.
Hors ligne