Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'essaie d'étendre un modèle le plus basiquement du monde avec Zend_Db_Table. Le problème est que je me retrouve avec un message "Application Error" et rien d'autre. J'ai pourtant déjà réalisé une application avec Zend et ce problème ne s'est pas présenté ça doit donc être une erreur toute bête ou il y a quelque chose que je n'ai pas compris. La différence avec la dernière fois c'est que je travaille avec les modules:
Le code du modèle (on travaille dans le module Polls, les modèles sont préfixés par "Model") jusque là pas de problème:
class Polls_Model_Contacts extends Zend_Db_Table { protected $_name = 'polls_contacts'; protected $_primary = 'id'; }
Ensuite dans mon IndexController:
public function contactAction() { if ($this->getRequest()->isXmlHttpRequest()) { $mail = $this->_request->getParam('mail'); $contacts = new Polls_Model_Contacts(); //apparemment le problème vient de cette ligne... $row = $contacts->createRow(); $row->mail = 'mail'; $row->save(); } }
Dans le fichier Bootstrap.php dans le dossier application j'ai:
protected function _initDb() { $config = new Zend_Config($this->getOptions()); try{ $db = Zend_Db::factory($config->resources->db); $db->getConnection(); }catch ( Exception $e ) { exit( $e -> getMessage() ); } Zend_Registry::set( 'dbAdapter', $db ); return $db; }
Je tiens à préciser que j'arrive à accèder à la base de données par une autre table du programme et à afficher les tuples. Le problème est vraiment localisé dans le fait que j'étend Zend_Db_Table, du moins à première vue.
Merci de votre aide.
Hors ligne
Peut être que tu as oublié :
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Hors ligne
Merci, mais ça doit se mettre à quel niveau cette ligne, avant la création de l'objet Contacts()? Car dans tous les cas que j'ai vu jusqu'à présent je n'avais pas à mettre cette ligne mais je vais tenter le coup.
Hors ligne
Le problème est résolu, il fallait bien recupérer l'adaptateur dans le registry puis ajouter ta ligne:
public function contactAction() { if ($this->getRequest()->isXmlHttpRequest()) { //$mail = $this->_request->getParam('mail'); Zend_Db_Table_Abstract::setDefaultAdapter($db); $contacts = new Polls_Model_Contacts(); $row = $contacts->createRow(); $row->mail = 'mail'; $row->save(); } }
Merci pour ton aide, c'est bien ce que je pensais c'était tout bête :p.
Hors ligne
Hello,
Tu devrais mettre cette ligne dans _initDb :
protected function _initDb() { $config = new Zend_Config($this->getOptions()); try{ $db = Zend_Db::factory($config->resources->db); Zend_Db_Table_Abstract::setDefaultAdapter($db); $db->getConnection(); }catch ( Exception $e ) { exit( $e -> getMessage() ); } Zend_Registry::set( 'dbAdapter', $db ); return $db; }
Elle serait alors valable pour toutes tes tables et c'est, de toute façon, son but
A+
Hors ligne
Hello,
Comme tu nomme ta fonction _initDb, je crois que tu écrase le fonctionnement normal et donc tu ne prends pas en compte la partie ini (à vérifier cependant).
A+
Hors ligne
mikaelkael a écrit:
Hello,
Comme tu nomme ta fonction _initDb, je crois que tu écrase le fonctionnement normal et donc tu ne prends pas en compte la partie ini (à vérifier cependant).
A+
Oui je confirme j'ai pu en faire l'expérience, à mes dépends ...
Hors ligne
Pages: 1