Jak psát presenter s využitím action… a render… ?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
x2martinka2x
Člen | 4
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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é.)

x2martinka2x
Člen | 4
+
0
-

dobře tak dík