Akce před handlerem formuláře

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

Zdravím,

trošku mám ve formulářích guláš a rád si to úplně ujasním.

Mějme situaci: mám presenter a v něm komponentu formular co vytvoří formulář a akci edit. Takže formulář slouží k editaci něčeho.

V životním cyklu presenteru se nejdříve spustí akce edit, udělá nějakou authorizaci, jestli má uživatel vůbec právo editovat, podle getParam[‚id‘] z databáze vytáhne editovaný objekt a pomocí $this[‚formular‘]->setDefaults(…) nastaví výchozí hodnoty ve formuláři.

Samotný formulář má nastavený callback onSuccess[] na nějaký handler, pojmenovaný třeba upravFormular.

Formulář odešlu: Pokud je formulář nevalidní, upravFormular se nezavolá a znova se vykoná vše co je v akci edit (tedy authorizace, setDefaults se neprovede, protože je inteligetní a nastavuje jen prázdný formulář). Pokud je vše OK, spustí se akce edit (opět se provede authorizace – v případě nedostatečných práv vyhodím throw new ForbiddenRequestException;) a pak se zavolá upravFormular, co může formulář třeba uložit do databáze.

A tady je moje otázka: je nutné dělat authorizaci i v upravFormular? Je možné ho spustit nějak jinak? Bez provedení akce? Nejsem si zde vůbec jistý a rád bych v tom měl jasno. Jinak vše funguje.

Také mě mate, že někde na foru jsem viděl, že někteří pojmenovávají handler pro zpracování formuláře:

public function handleUpravFormular($form)
{

}

U takto pojmenováného handleru je mi jasné, že se k němu půjde dostat i přes url, protože se z něj stane signál. Ale já takhle handlery pro onSuccess nepojmenovavám. Jak to tedy je? :-)

Děkuji za odpovědi.

mkoubik
Člen | 728
+
0
-

Handler formuláře je signál jako jakýkoliv jiný, jen je to signál komponenty (formuláře), ne presenteru. Takže ošetřit se to musí i tam, dal by se jinak zavolat pomocí url a podstrčit data v postu.

HFechs
Člen | 5
+
0
-

mkoubik: Můžeš mi prosímtě ukázat příklad url, nebo ještě lépe zápis pomocí latte (n:href=„…“) abych si mohl otestovat jak se mi to v tomto případě chová?

voda
Člen | 561
+
0
-

Stačí upravit url v action u formuláře. Místo action=edit tam může kdokoliv podstrčit třeba action=default, kde se oprávnění nekontroluje.

HFechs
Člen | 5
+
0
-

To je fakt :-). Díky moc. Tušil jsem, že validovat musím v obou, ale chtěl jsem mít jistotu.

Pustil jsem si https://www.youtube.com/watch?… a trošku v těch komponentách začínám mít jasno.