Doppio database gestito

Buonasera a tutti.

Chiedo aiuto affinchè qualcuno mi dia una mano nel capire come fare in ZF a gestire un secondo db Mysql.

In pratica, oltre alla connessione specificata nel file application.ini in un progetto ZF, dovrei occasionalmente interrogare un secondo db Mysql.

Occasionalmente significa che devo avere la possibilità di fornire le nuove credenziali in un form e con il submit avere, (da quel momento in poi) tale connessione sempre in memoria.

Quindi, da quel momento in poi solo alcune interrogazioni (controller/action) debbono poter usare la seconda connessione per estrarre i dati.

Chiaramente, a me interessa sapere solo come istanziare la seconda connessione e soprattutto come renderla disponibile per ogni controller/action.

Spero solo di essere stata chiara.

Vi ringrazio in anticipo.

Lucia

inviato 5 anni fa
lcisetti
X 0 X

Interessante :)

A me vengono in mente tantissimi stratagemmi per ottenere questa cosa.

Definiamo un po' le cose:

- dove salverai i dati presi in input per la connessione al database?

- la connessione serve solo ad un controller o a più controller o ad un modulo?

- la connessione deve essere disponibile per altri controller a piacere o action a piacere?

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Ciao Marios.

Diciamo cosi:

1) Effettuo l'autenticazione degli utenti leggendo dal "db-main" la classica tabella users;

2) Nella stessa tabella users esiste un campo chiamato "dbuser";

3) Nel campo "dbuser" c'è scritto che il db di competenza dell'utente loggato si chiama ad es. "db-user1";

4) Pertanto, dopo avere effettuato il login con successo, l'utente corrente deve poter avere a disposizione (quindi nella sessione dell'applicazione) sia il "db-main", sia il "db-user1", in modo da poter prendere alcune informazioni dal primo db altre informazioni dal secondo db.

Spero sia riuscita ad essere chiara.

Grazie

Lucia

risposto 5 anni fa
lcisetti
X 0 X

Altrochè!

Non credo sia difficile. Allora, in linea teoria: l'applicazione ha già il suo adapter per connettersi al database. Bisognerà semplicemente istanziare un secondo adapter con i dati prelevati dalla tabella dell'utente nel momento in cui lui ha eseguito l'autenticazione:

http://framework.zend.com/manual/en/zend.db.adapter.html

Quando si inizializzano gli oggetti Zend_Db_Table si indica quale adapter usare:

http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.constructing

L'adapter può essere istanziato anche solo nell'init del controller, dunque diventa disponibile solo per il controller e le sue action associate. Oppure si può istanziare sempre dopo l'autenticazione e renderlo disponibile all'intera applicazione php con Zend_Registry:

http://framework.zend.com/manual/en/zend.registry.using.html

Nel creare tutto questo bisognerà avere anche l'attenzione di vedere il carico sul server, più utenti ci sono e più sessioni si creano con più adapter creati e maggiori connessioni a database differenti. Dunque è il caso di monitorare le impostazioni del server ed eventualmente agire sull'applicazione con sistema di caching.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda