Propojení Nette s Dibi (nejlepší možnost?)
- stibto
- Člen | 6
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áš
- Vojtěch Dobeš
- Gold Partner | 1316
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
Kolega na to dokonce udělal (rozpracovaný, hodně) veřejný repositář: https://github.com/…ette-sandbox.
Ukázka propojení je vidět hlavně v:
- konfiguraci https://github.com/…/config.neon
- modelu https://github.com/…pleModel.php
- případně propojení presenteru s modelem https://github.com/…resenter.php
- Vojtěch Dobeš
- Gold Partner | 1316
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
Doporučuji postupovat podle
článku – použít Extension na registraci a konfigurovat pomocí sekce
dibi
.
- joe
- Člen | 313
Filip Procházka napsal(a):
Doporučuji postupovat podle článku – použít Extension na registraci a konfigurovat pomocí sekcedibi
.
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
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
@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
@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.
- enumag
- Člen | 2118
@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
@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
@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)