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.