Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-04-2010 16:09:52

kktos
Nouveau membre
Date d'inscription: 13-04-2010
Messages: 5

[Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

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 ! wink

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 ?!? big_smile

merci

Hors ligne

 

#2 14-04-2010 17:05:19

Zartan
Membre
Date d'inscription: 22-06-2009
Messages: 49

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

Bonjour, vous pouvez ne pas vous servir des modèles DbTable tout en conservant l'adapter.

Code:

        $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

 

#3 15-04-2010 11:58:02

kktos
Nouveau membre
Date d'inscription: 13-04-2010
Messages: 5

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

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 .... wink

merci

Dernière modification par kktos (15-04-2010 11:58:34)

Hors ligne

 

#4 15-04-2010 16:01:51

Zartan
Membre
Date d'inscription: 22-06-2009
Messages: 49

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

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

 

#5 16-04-2010 09:27:49

kktos
Nouveau membre
Date d'inscription: 13-04-2010
Messages: 5

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

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

 

#6 16-04-2010 12:36:38

Zartan
Membre
Date d'inscription: 22-06-2009
Messages: 49

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

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

 

#7 16-04-2010 13:54:28

kktos
Nouveau membre
Date d'inscription: 13-04-2010
Messages: 5

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

Pour le controller, bien vu ! wink
$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

 

#8 16-04-2010 14:53:58

Zartan
Membre
Date d'inscription: 22-06-2009
Messages: 49

Re: [Zend_Db_Adapter][1.10] comment les avoir autoloaded ?

Cela peut se faire au niveau du modèle, en reprenant les méthodes de DbTable :

Code:

    /**
     * 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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages