Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je veux instancier ma classe "acltable" dans la fonction construct de ma classe adexacl.php mais je reçoit un message d'erreur et je ne comprends pas pourquoi. Ma classe acl.php "extends" la classe Zend_Acl, le problème peut-il venir de là?
Ma classe acltable.php
<?php class acltable extends Zend_Db_Table { protected $_name = "Acl"; protected $_primary = "AID"; } ?>
Ma classe adexacl.php
class adexacl extends Zend_Acl { // Classe à l'état de test pour l'instant public function __construct() { (...) $tableAcl = new acltable(); $id = login::GetUID(); // fonction qui me renvoit l'ID de l'user depuis une autre base de donnée $select = $tableAcl->select(); $select->where('AID = ?',$id); $result = $tableAcl->fetchAll($select); (...) } }
Le message d'erreur obtenu est le suivant:
Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for acltable' in /mnt/sdb1/www/adex/zfAdex/library/Zend/Db/Table/Abstract.php:636 Stack trace: #0 /mnt/sdb1/www/adex/zfAdex/library/Zend/Db/Table/Abstract.php(621): Zend_Db_Table_Abstract->_setupDatabaseAdapter() #1 /mnt/sdb1/www/adex/zfAdex/library/Zend/Db/Table/Abstract.php(286): Zend_Db_Table_Abstract->_setup() #2 /mnt/sdb1/www/adex/zfAdex/application/default/models/adexacl.php(69): Zend_Db_Table_Abstract->__construct() #3 /mnt/sdb1/www/adex/zfAdex/application/bootstrap.php(28): adexacl->__construct() #4 /mnt/sdb1/www/adex/zfAdex/public/index.php(13): require('/mnt/sdb1/www/a...') #5 {main} thrown in /mnt/sdb1/www/adex/zfAdex/library/Zend/Db/Table/Abstract.php on line 636
Merci d'avance à qui pourra me renseigner
A. Bessems
Dernière modification par abessems (03-03-2009 09:36:16)
Hors ligne
je ne comprends pas bien ce que tu cherche à faire
mais là il te dit simplement que tu construit un objet Table sans adapter de base de donnée
en clair tu cherche à établir un lien entre ton objet acltable et la table "ACL" dans ta base mais sans connexion à la base
A+JYT
Hors ligne
Hello,
Tu dois fournir un adaptateur de base de données à table.
A+
@sekaijin: plus rapide
Dernière modification par mikaelkael (03-03-2009 10:22:48)
Hors ligne
Merci pour vos réponses mais jusqu'à maintenant je n'ai jamais eu de problèmes avec mes bases de données, j'utilise même acltable.php dans d'autres fichiers mais ici je ne comprends pas pourquoi ça ne fonctionne pas.
Dans mon initialiser.php j'ai une fonction qui se charge de se connecter à la base de donéne
public function initDb() { // Initiation du fichier config $config = new Zend_Config_Ini('http://xxx/adex/zfAdex/application/adex.ini', 'MYSQL'); // Mise en place de la Base de Données try { $db = Zend_Db::factory($config->database-> adapter, $config->database-> params); Zend_Db_Table::setDefaultAdapter($db); $db->getConnection(); // On test si la connexion s'est bien déroulée Zend_Registry::set('db',$db); } catch (Zend_Db_Adapter_Exception $e) { echo $e->getMessage(); // Si on ne voit aucuns messages d'erreurs à ce stade, c'est que la connexion à la BDD a réussi. } }
Hors ligne
Je me demande si le problème ne viendrai pas du fait que ma classe est appelé avant le dispatch du bootstrap (logique de l'appeler là vu que c'est la gestion des ACL mais est-ce que à ce stade, on peut aller appeler d'autres classes ?)
Bootstrap.php
set_include_path('.' . PATH_SEPARATOR . '../library' . PATH_SEPARATOR . '../application/default/models/' . PATH_SEPARATOR . get_include_path()); require_once 'Initializer.php'; // Prepare the front controller. $frontController = Zend_Controller_Front::getInstance(); $frontController->registerPlugin(new Initializer('development')); $acl = new adexacl(); $frontController->registerPlugin(new pluginauth($acl)); // Dispatch the request using the front controller. $frontController->dispatch();
Où placez vous l'instanciation du fichier ACL en général ?
Hors ligne
tu doit avoir un param du constructeurA+ qui te permet de spécifier l'adapter
A+
Hors ligne
Je suis encore débutant dans Zend Framework, pourrais-tu être plus précis.
Le problème vient donc bien du fait que je l'appele avant le dispatch si j'ai compris ?!?
Hors ligne
regarde la doc du constructeur
il y a moyen de passer un tableau de params dont l'adpater à la base
A+JYT
Hors ligne