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 | 1029
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)