Vytvoření připojení k databázi

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

Zdravím,

potřeboval bych vytvořit spojení do databáze na základě nutných informací pro připojení tedy, dsn, username, password. Tyto informace získám z formuláře, a na základě těchto získaných dat se teprve snažím vytvořit spojení z databází. Pokud použiji

<?php
$connection = new Nette\Database\Connection($dsn, $username, $password);
?>

v konstruktoru modelu, tak se dostávám do situace, kdy v době vytvoření modelu tyto data ještě nemám z formuláře k dispozici, takže se spojení s databází nevytvoří. Jde tento problém nějak vyřešit?

Díky za radu

Editoval James (14. 3. 2013 12:55)

frosty22
Člen | 373
+
0
-

Pokud získáváš data pro připojení z formuláře, tak předpokládám tedy, že se jedná o nějaký „phpmyadmin“ co tvoříš (jiný důvod, proč získávat data od uživatele pro připojení do databáze mě nenapadá)?

V tomto případě tedy po odeslání formuláře se dostáváš do procesu onSuccess na formuláři, kde si tyto data ulož například do session? a následně přesměruj na jiný presenter, kde již je databáze potřeba. Na stránce, kde se získávají data pro připojení tedy databáze dostupná samozřejmě nebude. Logika stejná jako s přihlašováním uživatelů.

castamir
Člen | 629
+
0
-

Pokud ti jde opravdu o nějaký phpmyadmin, určitě mrkni na adminer.

James
Člen | 54
+
0
-

Úplně ně tak o phpmyadmin nejde, vytvářím aplikaci pracující se strukturami tabulek nad databázemi a proto potřebuji formulář, skrze který se připojím k libovolné databázi. Je mi jasné, že na stránce s formulářem databáze dostupná nebude, to není ani mým cílem. Pouze potřebuji vytvořit připojení do databáze až tehdy, kdy budu mít data z formuláře.

frosty22
Člen | 373
+
0
-

No moc asi nechápu tedy v čem je problém? Máš problém s předáváním connection mezi servicema? Jelikož pokud je máš definované v Neonu, tak nemůžeš předat ještě connection, jelikož není nastavené? Tohle mě asi napadá jako případný problém. A pokud ano, tak mě moc řešení nenapadá, resp. sice můžeš nastavit Connection například ve startup v BasePresenteru ze Session, ale to si nemůžeš být jistý, že nějaká služba si ho již nevyžádala dříve (leč to se nestane, ale z hlediska OOP to není košér:).

Takže leda to ošetřit nějakým proxy objektem na Connection, který by v případě, že si ho služba vytáhne dříve vyhazoval nějakou vyjímku? Taky zrovna né moc cool řešení. Ale máš tedy na mysli tento problém či nějaký jiný?