class Film { public $ID; public $title; public $releaseDate; }
Istnieje widok:
Tytuł: {{film.title}} Data: {{film.releaseDate}}
Otrzymamy datę w formacie YYYY-MM-DD lub uniksowy znacznik czasu. Niektóre ORM-y same mapują pola typu date i datetime do obiektu klasy DateTime, ale załóżmy, że tak się nie dzieje i musimy sami oprogramować formatowanie daty. Dodatkowo chcemy w pewnych przypadkach wyświetlać tekst "Wczoraj", "Dziś", "8 sekund temu", itd. Jak to rozwiązać i dlaczego tak?
1. Dodanie funkcji pomocniczych
// definiujemy funkcje function formatDate($data) { return ... } function formatISO8601($data) { return ... } // potem podpinamy do silnika szablonów // a w szablonie wywołujemy: {{formatDate(film.releaseDate)}}
2. Utworzenie klasy i ręczne mapowanie
// definiujemy klasę class NaszaData extends DateTime { public function format() {} public function toISO8601() {} public function __toString() {} public function __construct($rawDate) {} } // jeśli framework pozwala, mapujemy pole class Film { public function afterFetch() { $this->releaseDate = new NaszaData($this->releaseDate) } } // odwołanie w szablonie: {{film.releaseDate}} lub {{film.releaseDate.toISO8601()}}
3. Inaczej?