Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai un petit problème pour "porter" ma connexion de classe en classe.
J'utilise le modèle MVC, et j'ai çà dans mes différents fichiers :
index.php :
$db = Zend_Db::factory($config->database); Zend_Db_Table::setDefaultAdapter($db);
IndexController.php :
class IndexController extends Zend_Controller_Action { public function indexAction() { $users = new Users(); }
Users.php :
class Users extends Zend_Db_Table { protected $_name = 'users'; }
Et j'obtiens :
Fatal error: Call to a member function describeTable() on a non-object in D:\Dev\projets_PHP\test_zf\library\Zend\Db\Table\Abstract.php on line 595
Si je mets mon $users = new Users() dans mon index, celà fonctionne très bien en revanche.
Geoffrey
Dernière modification par Geoffrey (04-12-2007 14:06:01)
Hors ligne
J'ai peut-être mal suivi, mais où est le problème ? :p
Hors ligne
Julien a écrit:
J'ai peut-être mal suivi, mais où est le problème ? :p
C'est vrai que j'en ai oublié la question dis donc ... j'ai édité mon message pour rajouter l'erreur que j'obtiens
Dernière modification par Geoffrey (03-12-2007 15:56:55)
Hors ligne
Ca, c'est un bug que j'ai remonté et sur lequel je suis en train de travailler ( ZF-2244 ).
En fait, ton adapter est mal passé à la classe Zend_Db_Table.
Vérifie que l'adapter est bien formé (instance de Zend_Db_Adapter) , et qu'il est correctement passé (setDefaultAdapter())
A l'avenir, nous corrigeons ce bug afin d'envoyer une exception ('No adapter found').
Hors ligne
Mon adapter doit être bon car si je fais appel à ma classe Users directement dans le fichier index.php, ca marche. Le problème se produit uniquement quand je passe par le controlleur. Je dois oublié de le passer quelque part, mais je ne trouve pas où, j'ai regardé dans la doc et j'ai trouvé comme j'ai mis, rien d'autres
Hors ligne
Un coup de débuggeur, et t'auras vite compris.
Je vois pas là sinon.
Hors ligne
à mettre dans le bootstrap
$dbAdapter = Zend_Db::factory($parameters->db, $params); Zend_Registry::set('dbAdapter', $dbAdapter); Zend_Db_Table::setDefaultAdapter('dbAdapter');
la méthode _setAdapter de Zend_Db_Table_Abstract peu prendre alors en paramètre la clef de la registry
$tbl = new maTable('dbAdapter');
de même si elle est passé dans le tableau de config du constructeur de table.
si aucun adapter n'est fourni à la table alors Zend_Db_Table_Abstract utilise le defaultAdapter fournit de façon globale à toutes les tables.
$tbl = new maTable();
A+JYT
Dernière modification par sekaijin (04-12-2007 07:48:57)
Hors ligne
Merci pour vos réponses
Je viens d'essayer ta méthode sekaijin, mais celà ne marche toujours pas
dans mon IndexAction, je mets :
class IndexController extends Zend_Controller_Action { public function indexAction() { $users = new Users('dbAdapter'); } }
et j'obtiens :
Zend_Exception: No entry is registered for key 'dbAdapter' in D:\Dev\projets_PHP\test_zf\library\Zend\Registry.php on line 145
En fait, j'ai l'impression que tout ce que je mets dans mon index.php, mes controlleurs ne s'en servent pas. Je dois merder dans ma déclaration du MVC :
// Initialisation du controlleur $controller = Zend_Controller_Front::getInstance(); $controller->setControllerDirectory('controllers'); $controller->throwExceptions(true); $controller->setParam("noViewRenderer",true); // Initialisation du viewRenderer $view = new Kitpages_View_Smarty(); $view->setEngine($smarty); // Initialisation du helper $viewManager = new Kitpages_Controller_Action_Helper_ViewManager(); $viewManager->setView($view); Zend_Controller_Action_HelperBroker::addHelper($viewManager); // Démarrage du modèle MVC $controller->dispatch();
Hors ligne
tu n'a pas mis le dbadapter dans ton bootstrap comme je l'ai donné l'adapter n'est donc pas connu
à mettre dans le bootstrap
$dbAdapter = Zend_Db::factory($parameters->db, $params); Zend_Registry::set('dbAdapter', $dbAdapter); Zend_Db_Table::setDefaultAdapter('dbAdapter');
class IndexController extends Zend_Controller_Action { public function indexAction() { $users = new Users(); } }
A+JYT
Hors ligne
sekaijin a écrit:
tu n'a pas mis le dbadapter dans ton bootstrap comme je l'ai donné l'adapter n'est donc pas connu
Si si, il y est, c'est que je n'ai pas copier/coller tout mon code
Hors ligne
sekaijin, ta réponse précédente m'a fait faire tilt ...
En fait je fais ma connexion à la bdd APRES avoir initialisé le MVC, hors il est évident que si je veux que je MVC se serve de cette connexion, il faut qu'elle soit faite avant ...
Ce n'est donc qu'une erreur d'étourderie qui me prend la tête depuis hier
Merci
Hors ligne
Pages: 1