Properties – nette 2.4, latte

- Jiří Nápravník
 - Člen | 710
 
Zdravím,
používám Doctrine a entity my vstupují do šablon. Všechny entity
rozšiřovali Nette\Object a v latte tak používal pěkně přístup přes
$item->title – který v podstatě zavolal $item->getTitle(). Od verze
2.4 bych měl implementovat traitu SmartObject, nicméně jak jej použiji, tak
už bych musel u entit nadefinovat všechny s anotací @property. Ale
to je nutné psát ke skoro všem atributům u entit? To tak opravdu děláte?
Není to moc průdérní? Property nikde jinde nepoužívám a používám
standardně gettery a settery, ale v šablonách mi přijde jaksi zbytné psát
$item->getTitle()…
Samozřejmě vím, jde používt MagicAccessor z Kdyby nebo podobně, ale není nějaká cesta na to přímo v nette?

- jiri.pudil
 - Nette Blogger | 1034
 
Odpovím na
To tak opravdu děláte?
Když jsem hodně líný, napíšu v šabloně přímo
$item->getTitle(). Ale postupem času jsem došel k tomu, že
se mi nelíbí posílat do šablony entity. Proto když nejsem líný, vyrobím
si z entit(y) data transfer object pro konkrétní šablonu. Takový DTO je
z definice hloupá, jednoúčelová přepravka na data, takže v něm mám
public properties a pokud možno co nejprimitivnější typy (stringy, čísla,
datum a čas, pole vnořených DTOček místo kolekcí entit, …). Není v tom
pak ani troška magie a mám striktně oddělený model (entitu) od
view (DTO).

- Tharos
 - Člen | 1030
 
Po vyzkoušení všemožných přístupů a opakovaném rozbití si úst se
mi nejvíce osvědčilo do šablony předávat pouze skalární hodnoty a
instance stdClass aka view objekty (klidně i zanořené).
Samozřejmě až na nějaké výjimky, instance
DateTime atp…
Je to variace na ta DTO, ale mám na to takové malé
udělátko, které myslím umí slušně minimalizovat
tu režii kolem.
Kombinace EntryViewer a Doctrine entit je v tomto případě
kompletně non-magical.
Editoval Tharos (20. 11. 2017 11:28)