Jak psát presenter s využitím action… a render…?
- x2martinka2x
- Člen | 4
ahoj používám nette poprvý a chci napsat presenter a tak mě zajímá, když podle životního cyklu presenteru jsou metody action{View} a render{View}
neni jednodušší to napsat jen do action{View}? :)
fungovat to bude samozřejmě taky, ale proč se ptám, protože když si napíšu třeba
actionClanky(), tam vyberu z databaze nějaký články a jak je teď mam dát do view?
Podle životního cyklu by to mělo být v renderClanky()
Když si teda v tom actionClanky do nějaký proměnný natáhnu řádky s článkama, tak neni jednodušší to do šablony dát
$this->template->clanky = $clanky;
? A pokud to mam dělat za pomoci renderClanky(), jak proměnnou $clanky dostanu do této metody? To bych si pro vechno, co vytahuju z databáze musela napsal atributy třídy? Chápu, že u malých stránek to je celkem jedno, ale tak ptám se třeba i do budoucna,že
- x2martinka2x
- Člen | 4
to nechápu, nikde tam není nic o tom na co se ptám, řeší se tam uplně něco jiného
- Lopata
- Člen | 139
Ondřej Mirtes napsal(a):
Jediné dva případy, co mě napadají, kdy může nastat nějaký zádrhel:
* Programátor nenásleduje best practices a plní šablonu v action* metodě: Při prvním volání
$this->template->cokoli se zavolá createTemplate(), jenže po action* metodě může nastat nějaký redirect v
handle fázi.
.....
Honza Marek napsal(a):
Přece když vydoluju něco z modelu a chci to použít jak na rozhodnutí o přesměrování, tak v šabloně, tak to nebudu
sosat zbytečně ve dvou metodách.
Závěr:
Je to úplně jedno v 95% případů. Věz ale, že to někdy může dělat
neplechu.
- x2martinka2x
- Člen | 4
ale tam to má spojitost s flash zprávičkama a na to se neptám, ale úplně na něco jinýho.
Pokud tedy mám používát jak action i render, tak v tom případě musim mít nějaký proměnný uvnitř třídy, kam si zapíšu výsledky, abych je mohla používat v obou metodách.
- Lopata
- Člen | 139
x2martinka2× napsal(a):
ale tam to má spojitost s flash zprávičkama a na to se neptám, ale úplně na něco jinýho.
Pokud tedy mám používát jak action i render, tak v tom případě musim mít nějaký proměnný uvnitř třídy, kam si zapíšu výsledky, abych je mohla používat v obou metodách.
To na věci nic němění. Tam je úplně jedno, co do šablony dáváš.
Obecně platí, že v metodě action* by měla být logika, po které se
přesměruje
- má user právo tohle vidět?
- je id číslo?
atp.
V metodě render* bys už v podstatě mohla předpokládat, že je vše ok. Správně bys nejspíš ty články v action* ani neměla vybírat.
ALE:
Komu se to chce psát? Obecně platí, že vše můžeš dát do action* a
v drtivé většině případů to bude fungovat.
Otázka je, jak moc pro tebe znamená krása kódu. Nikde není psáno,
že to do šablony MUSÍŠ dávat v render*. Je to nezbytné jen někdy. Já
osobně render* metody používám zřídka a vše funguje. (Někdy ale jsou
nutné.)