Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
bonjour à tous.
j'ai joué jusque là avec un vieux framework et pour un nouveau projet, j'utilise la version 1.10.
il y a qqs différences !
ce que j'apprécie est l'application et le bootstrap qui permettent de n'avoir pas grand chose à faire si ce n'est de définir ce dont on aura besoin ds l'INI.
Parfait.
Mon problème est simple, je ne veux pas utiliser DBTable car je n'en ai aucun besoin. Mes accès db ne sont que vers des stored procedures. le modele de la DB reste opaque du point de vue de php. par choix.
donc, si j'ai tout compris, si j'utilisais un DBTable (comme ds l'exemple pour démarrer de la doc) grace au "Module Resource Autoloader" (http://framework.zend.com/manual/en/zen … ource.html), tout sera chargé et setupé pour moi.
Et donc j'aurai mon DB_Adapter d'instancié.
oui, mais voilà, je ne veux pas utiliser de DbTable.
Donc, la "builtin feature" n'est pas pour moi.
Ma question: comment je peux dire au FW d'instancier mon DB_Adapter ?
Faut il que j'appele Zend_Loader_Autoloader_Resource::addResourceType ? Ds le bootstrap ?
Ou suis je complètement à coté de la plaque ?!?
merci
Hors ligne
Bonjour, vous pouvez ne pas vous servir des modèles DbTable tout en conservant l'adapter.
$db = Zend_Db_Table::getDefaultAdapter() ; $sql = <<<QUERY ... votre requête ici... QUERY; $stmt = $db->query($sql) ; $resultat = $stmt->fetchAll(PDO::FETCH_OBJ) ;
C'était la question posée ?
Il est bon de conserver au moins l'adapter au cas où vous voudriez par exemple utiliser Zend_Auth par la suite.
Hors ligne
bonjour Zartan.
cela peut marcher, mais si j'ai mis un defaultAdapter.
Et si je n'ai qu'un adapter.
mais là, j'en utilise plusieurs et j'ai une config INI qui utilise ressources.multidb.
L'idée ici étant que le FW instancie les DBAdapters pour moi.
Sauf que cela ne le fait pas. ce qui est normal au vu de ce que fait par défaut le FW avec la classe Zend_Loader_Autoloader_Resource.
Si j'ai bien saisit le truc, bien sûr. Suis en train de creuser les sources histoire de bien piger le truc.
Je continue de chercher. Mais si qqun à une idée avant ....
merci
Dernière modification par kktos (15-04-2010 11:58:34)
Hors ligne
Dans ce cas vous pourriez écrire vos propres modèles, chacun reconnaissant son adapter.
Pour les retrouver c'est expliqué ici : http://manual.zfdes.com/fr/zend.applica … urces.html
Dernière modification par Zartan (15-04-2010 16:05:36)
Hors ligne
Pékab. c'est bien ce que je pensais, je partais à coté de la plaque !
le seul truc qui m'ennuit maintenant, c'est que pour charger mon dbA, il me faut le bootstrap et que je suis ds un model.
y aurait il une méthode de classe pour récupérer l'application ou le bootsrap ? ou bien y aurait il déjà une variable ds la registry ?
pour l'instant, j'ai mis ds mon bootstrap:
Zend_Registry::set('application', $application);
et mon model :
$application= Zend_Registry::get('application');
$resource= $application->getBootstrap()->getPluginResource('multidb');
$this->_db= $resource->getDb('product');
mais cela me parait surprenant qu'il n'y ait pas un moyen propre de le faire.
merci
Hors ligne
C'est expliqué ici pour l'accès à partir d'un contrôleur (dans Resource Registry) :
http://framework.zend.com/manual/fr/zen … ation.html
Pour un modèle il faut creuser la question, mais on peut toujours utiliser Zend_Registry à partir du bootsrap pour stocker les adapters.
Hors ligne
Pour le controller, bien vu !
$bootstrap = $this->getInvokeArg('bootstrap');
je regarde pour le model.... il y a peu etre un plan similaire.
ce qui serait plus propre plutot que de devoir passer le $bootstrap ds le constructeur du model.
Hors ligne
Cela peut se faire au niveau du modèle, en reprenant les méthodes de DbTable :
/** * Zend_Db_Adapter_Abstract object. * * @var Zend_Db_Adapter_Abstract */ protected $_db; /** * Default Zend_Db_Adapter_Abstract object. * * @var Zend_Db_Adapter_Abstract */ protected static $_defaultDb;
public static function setDefaultAdapter($db = null);
public static function getDefaultAdapter();
protected function _setAdapter($db);
public function getAdapter();
protected static function _setupAdapter($db);
Ensuite il suffit d'initialiser Zend_Registry avec les valeurs adéquates pendant le bootstrap, ou simplement d'appeler Modele::setDefaultAdapter().
Hors ligne
Pages: 1