Linkování na akci
- weckho
- Člen | 94
Ahoj,
mám v aplikaci zprávy, u každé zprávy mám odkaz na smazání. Odkaz linkuji jako:
{link Zpravy:delete, $zprava->id}
V ZpravyPresenter.php mám actionDelete(). Odkaz však nefunguje, když nad něj najedu myší, píše stavový řádek error: No route for Zpravy:delete(id=x).
Musím vytvářet routy také pro akce? Nebo mám odkaz vytvořen nějak špatně?
Díky
- weckho
- Člen | 94
Díky, po úpravě funguje:
{plink Delete! $zprava->id}
Tento tvar nefunguje:
{plink Zpravy:delete! $zprava->id}
Píše to (ve stavovém řádku): error: Unknow signal ‚ZpravyPresenter:Zpravy:delete!‘. Nevím proč. Mohl by mi ještě někdo objasnit, k čemu jsou vhodné akce a k čemu signály? Mám v tom zmatek.
Díky
Editoval weckho (6. 9. 2009 21:48)
- DocX
- Člen | 154
viz https://doc.nette.org/…n/presenters
Signál „spouští“ událost na presenteru a může být vyvolán pouze z aktuálního presenteru (například stisknutí tlačítka apod.). Signál nelze volat na jiný presenter! Je základním prvkem AJAXu v Nette.
Akce je v podstatě něco jako podstránka presenteru,
neboli sekce nějakého logického celku. Například presenter
MůjÚčet
bude mít akce Zobraz
, Edituj
.
Každá akce pak může mít různé view
, například podle typu
uživatele.
Pak akce může být buď „zobrazovcí“ (nechá spustit render) nebo může být pouze „akční“ (něco provede a přesměruje jinam). Akční akce by ale měly být tvořeny signály.
Takto to alespoň chápu já :) Připomínky vítám :)
Editoval DocX (6. 9. 2009 22:34)
- Ondřej Mirtes
- Člen | 1536
Já bych ještě doplnil, že signálů jsou dva druhy:
- ty, které mění stav aplikace a je tudíž po nich třeba provést
přesměrování (nejčastěji
$this->redirect('this')
)- např. hlasování v anketě, přihlášení uživatele, odeslání komentáře
- proč přesměrování (303 See Other): jednak aby třeba vyhledávače nezaregistrovaly link přímo na tu akci (což by vedlo třeba k nechtěnému hlasování v anketě a dalším i zkázonosnějším situacím) a v případě formulářů, aby nedocházelo k opětovnému odeslání pomocí F5 (více na wikipedii – Post/Redirect/Get)
- ty, které nějak ovlivňují dané view a přesměrování je u nich
nepotřebné, ba přímo nežádoucí. Např. řazení sloupce v tabulce,
stránkování… V tom případě v adrese zůstává tvar např.
(
/kategorie/procesory/?paginator-page=15&do=paginator-page
) a když uživatel někomu pošle odkaz, načte se mu rovnou na 15té stránce. Do této kategorie patří i případy, kdy se vyplatí formulář odesílat GET metodou (vyhledávání, právě přechod na stránku pomocí zapsání jejího čísla apod.)