Dynamické vytváření instancí Nette\Database

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
greeny
Člen | 405
+
0
-

Zdravím, mám menší dotaz…

Vyvíjím aplikaci pro kontrolu serverů her a přístup k nim.

Mám jednu „globální“ databázi, ve které jsou data o uživatelích a serverech a pak každý server má vlastní databázi s daty. Ty databáze mají stejnou strukturu.

Potřebuju si vždy předávat dvě připojení k databázi – jednak ke globální a jednak k jedné konkrétní (router – <server>/<presenter>/<action> – podle <server> určím, která to je). Samozřejmě to předávám do modelu, ale nevím jak na to…

Potřebuji pokud možno co nejčistší řešení, jak to vyřešit (včetně konfigurace).

Budu vděčný za každou pomoc, děkuji ;)

mkoubik
Člen | 728
+
0
-

Použil bych asi něco jako:

class ConnectionFactory
{
	private $server = NULL;

	public function setServer($server) { $this->server = $server; }

	public function createConnection()
	{
		if ($this->server === NULL) {
			throw new Exception('...');
		}
		$connection = // ... $this->server ...
		return $connection;
	}
}
services:
	connectionFactory: ConnectionFactory
	connection: @connectionfactory::createConnection()

Do routeru si předej connectionFactory a nastav mu název serveru z URL. Služby které vyžadují connection pak nepůjdou vytvořit před voláním IRouter::match().

Alternativně si můžeš předávat rovnou connectionFactory a connection si z něj tahat líně až když ho potřebuješ. Edit: unikátnost instance connection si pak musíš hlídat ručně v connectionFactory.

Editoval mkoubik (9. 9. 2013 14:15)

Jan Mikeš
Člen | 771
+
0
-

2–3 dny zpet jsem resil dynamicke vytvareni databazi pomoci factory a vyreseno pomerne pekne, pokud mas stale zajem dej vedet, hodil bych to na git/gist

greeny
Člen | 405
+
0
-

No já už jsem to taky vyřešil, ale jestli to někde máš, rád bych se podíval ;)

zimmi
Člen | 94
+
0
-

Nechtěli byste to kluci přece jen předvést? Momentálně řeším, že bych potřeboval vždycky po přihlášení uživatele začít přistupovat do databáze se jménem a heslem, která zadal, a motám se v kruhu, respektive nevím, jak tyhle dvě informace předat.

PS: NotORM.

Jan Mikeš
Člen | 771
+
0
-

Pro NDB muzes nakouknout do meho sandboxu

Podporuje lazy loading a zaroven slouzi jako locator (drzi si v sobe instance).
Pripadne otazky rad zodpovim.

Budu rad i za jakykoliv feedback a navrhy na vylepseni.