Nejste přihlášen(a)
Stránky: 1
Téma zavřeno
Přidal jsem do dibi dvě nové konfigurační direktivy v poli result:
detectTypes – aktivuje automatické detekce typů po
každém databázovém dotazu. Tj. automaticky se volá
$res->detectTypes().
formatDateTime (resultDateTime) – určuje formát,
do jakého se bude převádět typ DATE nebo DATETIME. Výchozí je
objekt DateTime! Podrobněji viz níže.
resultWithTables odstraněno (pokud to někdo používáte, dejte vědět, klidně vrátím zpět.)
Direktivy nastavíte při volání metody dibi::connect(...)
nebo new DibiConnection(...).
Pokud pracujete s datovými typy, mohou se vás dotknout tyto zpětně
nekompatibilní změny. Nastavení formátu skrze
result.formatDateTime totiž nahrazuje parametr
$format používaný u metod DibiResult::setType()
nebo convert() a ten je nyní ignorován.
Dále výchozím „formátem“ je objekt DateTime. Pokud
byste chtěli, aby výchozí formát byl UNIX timestamp jako v předchozích
verzích, nastavte result.formatDateTime => 'U'. Pokud získanou
hodnotu používáte v šablonách Nette, není potřeba nic měnit, Nette si
rozumí s DateTime stejně jako s timestampem.
Interní metoda setTypes pracuje s jinou strukturou pole,
jednodušší, tvořenou páry field ⇒ formát. Stejnou strukturu je potřeba
použít u DibiTableX::$types. Interní metoda convert() je
protected.
Možná se to zdá jako hodně změn, ale jde o okrajové oblasti, které se dotknou jen minima uživatelů. Kdyby jste narazili na nějaké komplikace, dejte vědět.
Přimlouvám se za to doplnit ještě resultDateFormat a
resultTimeFormat, protože takhle dibi převádí všechno na
DateTime, což u některých komponent (a nejen tam) může způsobovat
problémy (když očekávám čas a chci ho parsovat jako čas, tak se mi
nehodí část s datem (kterou DateTime doplní i když v databázi třeba
není)).
I come to see with eyes uncloaded by hate.
Nemohl bys přidat podporu pro vlastní konvertní funkce? Metoda
convert je sice nově protected, ale to je v praxi na
nic, protože i když vytvořím potomka, který chování této funkce
upraví, tak dibi bude pořád vracet původní DibiResult.
Sbírka vlastních komponent | GitHub | Twitter | Programátor v Clevis s.r.o. a Signály.cz, o.s.
V poslední verzi lze konfigurovat tímto způsobem i profiler. Raději jsem proto konfigurační direktivy vyčlenil do samostatných polí, takže konfig může vypadat třeba takto:
dibi::connect(array(
'driver' => 'mysql',
'user' => 'root',
'result' => array(
'detectTypes' => TRUE,
'formatDateTime' => ...,
),
'profiler' => array(
'run' => TRUE,
'explain' => FALSE,
),
);
Samozřejmě předchozí formát je podporován.