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

- greeny
 - Člen | 405
 
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
 
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
 
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.