Propojení Nette s Dibi (nejlepší možnost?)

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

Ahoj,
jsem začátečník v Nette frameworku a zkoušel jsem používat \Nette\Database, ale takto mi to moc nevyhovuje a rád bych používal Dibi, kterou vytvořil sám autor tohoto frameworku.

Chci se zeptat, jak je nejlepší propojit Nette s Dibi?
Četl jsem na webu dibi, že se dá použít jako statická funkce, ale nevím, zda je tato informace aktuální a zda je to stále takto bezpečné.

Moc děkuji za odpovědi.
Tomáš

Tabetha
Člen | 140
+
0
-

https://doc.nette.org/cs/database toto by ti mohlo pomôcť

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Jen doplním, že používat statický helper dibi:: je určitě „bezpečné“, ale je mnohem lepší držet se tzv. dependency injection (tedy vyvarovat se statickým voláním, předávat si instance hezky poctivě skrze parametry konstruktorů a metod…) – pak se člověk sám rozhodne, že dibi:: nepoužívá, ale předává si instanci DibiConnection. V Nette to lze stejně snadno jako… jde to snadno.

grogy
Člen | 147
+
0
-

Kolega na to dokonce udělal (rozpracovaný, hodně) veřejný repositář: https://github.com/…ette-sandbox.

Ukázka propojení je vidět hlavně v:

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

V tom repozitáři je dibi zavedeno trošku zvláštně – definovat vlastní službu není potřeba, zato by údaje měly být přímo v sekci dibi, nikoliv pod parameters. V bootstrap.php je dibi zaregistrované správně.

Filip Procházka
Moderator | 4668
+
0
-

Doporučuji postupovat podle článku – použít Extension na registraci a konfigurovat pomocí sekce dibi.

stibto
Člen | 6
+
0
-

Děkuji moc všem za rady, udělám to podle návodu na pla.nette.org. :-)

joe
Člen | 313
+
0
-

Filip Procházka napsal(a):
Doporučuji postupovat podle článku – použít Extension na registraci a konfigurovat pomocí sekce dibi.

Může mi někdo prosím vysvětlit, k čemu je to dobré – používa Extension namísto uvedení konfigurace „jen“ do config.neon? Nějak nemůžu přijít na žádnou výhodu a docela mi přijde, že se z jednoduchého používání Nette stává čím dál tím složitější framework… Proč mám zavádět další třídu (Extension), když to můžu udělat bez ní?

enumag
Člen | 2118
+
0
-

To Extension nemáš psát ty, to už je napsané přímo v dibi. Extensions jsou od toho aby ti zjednodušily instalaci doplňků.

joe
Člen | 313
+
0
-

@enumag:
Díky, já vim, že třeba u toho dibi už je třida připravena. Ale obecně nějak nevidim důvod ty Extension používat. Mně teda osobně se zdá ta první možnost "":https://doc.nette.org/cs/database#…
přehlednější, a je z ní patrné o co jde a s čím mohu v aplikaci počítat.

V bootstrapu si sice můžu načíst DibiNetteExtension, ale to už pak něco mám v neonu, něco mám v bootstrapu… a ztrácím přehled. Kromě toho tím ušetřím 4 řádky v neonu a musím napsat (ano, v případě dibi už nemusím :)) celou novou třídu… Opravdu to je za účelem zjednodušení? :)

enumag
Člen | 2118
+
0
-

@joe: Ano, účelem je opravdu zjednodušení. DibiExtension ti například přidá i panel do debugBaru. Ten bys bez extension v neonu přidával jen hodně krkolomě:

services:
	dibi.connection:
		setup:
			- '$service->onEvent[] = ?'(@dibi.panel::logEvent)
	dibi.panel:
		class: DibiNettePanel
		setup:
			- 'Nette\Diagnostics\Debugger::$bar->addPanel(?)'(@self)
			- 'Nette\Diagnostics\Debugger::$blueScreen->addPanel(?)'(@self::renderException)

Pozn. určitě v tom jsou drobné chyby.

Michalek
Člen | 211
+
0
-

Panel do debugBaru se přidá skrze profiler: true ale dobře tedy, asi mělo jít o příklad :-)

enumag
Člen | 2118
+
0
-

@Michalek: :-D :-D A kdo myslíš, že se stará o to, že profiler: true způsobí přidání panelu do debugBaru? ;-)

@joe: V bootstrapu nemusíš mít vůbec nic. Extensions se dají loadovat přes neon. V Nette 2.1 nativně, ve 2.0 potřebuješ doplněk. Syntax v neonu je v obou případech stejná.

Editoval enumag (22. 1. 2013 23:33)

Michalek
Člen | 211
+
0
-

@enumag: Předpokládám, že se mi o to stará DibiConnection, protože způsob přes Extension nepoužívám ;)

Editoval Michalek (22. 1. 2013 23:49)

enumag
Člen | 2118
+
0
-

@Michalek: Podíval jsem se na implementaci a ano, stará, ale tenhle způsob je v podstatě deprecated a dibi ho používá nejspíš pouze kvůli zpětné kompatibilitě. EDIT: Ano, je to jak jsem si myslel. Tahle část byla do konstuktoru DibiConnection přidána mnohem dříve než existovalo DibiNetteExtension.

Editoval enumag (22. 1. 2013 23:57)