Vyber medzi viacerymi databazami

steelbull
Člen | 241
+
0
-

Na hlavnej stranke, ktora sa defaultne zobrazuje mam login. Pod username a password chcem pridat select polozku database, do ktorej sa aplikacia bude pripajat. Samotny login sa bude kontrolovat voci databaze, ktora bola vybrata.

Nepotrebujem mat pripojene obidve DB sucasne, chcem mat jeden DB Context, ktory bude instancovat bud connenction jednej alebo druhej DB.

Tiez potrebujem ziskat ziskat zoznam databaz, ktore su na vyber (z neonu) a zobrazit ich v selecte na login page.

Dakujem za odpovede :-)

CZechBoY
Člen | 3608
+
0
-

S čim konkrétně máš problém? Každou databázi si nějak identifikuješ a ten identifikátor si někam uložíš (třeba do session). Pak v databázi budeš mít tabulku se seznamem názvů databází (tak aby tomu uživatel rozuměl) + id. V config.local.neon budeš mít konfiguraci těch databází. Databázi si pak můžeš vytáhnout z nějakýho manažera, kterej podle toho id vrátí správnou instanci databázi. Takže asi místo typehintování databáze budeš muset používat ten manažer a jeho se ptát na „dej mi správnou databázi pro tohohle uživatele“.

steelbull
Člen | 241
+
0
-

@CZechBoY Diky za rýchlu odpoveď. Zatiaľ mám toto. Upravil som neon nasledovne:

database:
    main:
        dsn: 'mysql:host=127.0.0.1:3306;dbname=databaza1'
        user: 'root'
        password: 'password'
        debugger:   true
        explain:    true
        reflection: discovered
        autowired:  true
    test:
        dsn: 'mysql:host=127.0.0.1:3306;dbname=databaza2'
        user: 'root'
        password: 'password'
        debugger:   true
        explain:    true
        reflection: discovered
        autowired:  true

Vyhadzuje mi to exception:
Multiple services of type Nette\Database\Context found...

Potreboval by som nejak nastavit, aby Context pouzival bud jednu alebo druhu DB.

Editoval steelbull (18. 5. 2018 13:18)

David Matějka
Moderator | 6445
+
+1
-

mohlo by fungovat neco jako:

database:
	dsn: '' # jen aby se to inciializovalo
services:
	- ConnectionFactory
	database.default.connection:
		create: @\ConnectionFactory::createConnection()
class ConnectionFactory
{
	public function createConnection()
	{
		// tady si to treba vytahnes z session nebo z post dat.
		$dsn = ...;
		$user = ...;
		$password = ...;
		return new Nette\Database\Connection($dsn, $user, $password);
	}
}
steelbull
Člen | 241
+
0
-

…moment, v configu som urobil chybu, vyzera, ze to funguje.

Editoval steelbull (18. 5. 2018 15:30)