tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

DateTime53 nedefinuje metodu __toString()

před 9 lety

theo
Člen | 50

PHP 5.3, Dibi 1.3-dev (revision 13aa8b2 released on 2010–04–06)

Narazil jsem na to, že při automatické detekci typů ve výsledcích (BTW móc pěkné :) a jejich nastavení jako výchozí hodnoty pro formulář v Nette (se kterým to možná až tak nesouvisí), se objevila chyba která tvrdí, že objekt třídy DateTime53 nelze převést na řetězec.

Díval jsem se do zdrojáku inkriminované třídy (v dibi/Nette/DateTime53.php) a následně i do dokumentace třídy DateTime, od které je DateTime53 poděděná a přišel jsem na to, že problém spočívá v tom, že ani DateTime53, ani DateTime nikde nedefinuje metodu __toString().

Mým (možná poněkud účelovým ale funkčním) řešením je prosté doplnění metody __toString(), přibližně takto:

<?php

public function __toString()
{
    return $this->format('Y-m-d H:i:s');
}

?>

Je to dobré řešení? Mohl by to někdo (David? :) opravit v distribučním dibi?

Díky

před 9 lety

David Grudl
Nette Core | 6806

DateTime53 je jen fixem třídy DateTime pro PHP 5.2, funkcionalitu by rozšiřovat neměl. Tudíž přidávat nové metody vyloženě nechci. Také je otázka, do jakého formátu se vlastně má datum převádět. Vhodnější tedy bude volat ->format('Y-m-d H:i:s') namísto převodu na řetězec.

před 9 lety

jardo
Člen | 17

David Grudl napsal(a):

DateTime53 je jen fixem třídy DateTime pro PHP 5.2, funkcionalitu by rozšiřovat neměl. Tudíž přidávat nové metody vyloženě nechci. Také je otázka, do jakého formátu se vlastně má datum převádět. Vhodnější tedy bude volat ->format('Y-m-d H:i:s') namísto převodu na řetězec.

Ahoj David

Chcel by som sa spýtať otázku práve ohľadom DateTime53.
Ak zavolám na výsledku klasické nastavenie hodnoty vráteného stĺpca cez

<?php
    $result->setType('delivery_transportation_time', dibi::FIELD_DATETIME, 'H:i');
?>

Pri pokuse definovať navrátenú hodnotu ako konštantu, alebo vypísať klasicky cez echo:

<?php
    define('DELIVERY_TRANSPORTATION_TIME', $row->delivery_transportation_time);
    echo $row->delivery_transportation_time;
?>

Dostanem nasledovné chyby a varovania:

  • Warning: Constants may only evaluate to scalar values…
  • Catchable fatal error: Object of class DateTime53 could not be converted to string…

Ako riešiť tento problém v novších verziách DiBi ? Vážne nebude potreba definovať tú spomínanú metódu ?

(DiBi 1.3-dev 26.5.2010, PHP 5.3)

Díky

Editoval jardo (5. 7. 2010 20:51)

před 9 lety

David Grudl
Nette Core | 6806

DateTime má metodu format pomocí které si můžeš datum převést do libovolného textového formátu a pak třeba uložit do konstanty.

před 9 lety

jardo
Člen | 17

David Grudl napsal(a):

DateTime má metodu format pomocí které si můžeš datum převést do libovolného textového formátu a pak třeba uložit do konstanty.

To teda ale znamená prekopanie všetkých zdrojákov, kde sa to používa … :(