Provedení akce před zavoláním action()

jedlicka
Člen | 70
+
0
-

Ahoj,

mám šablonu latte (např. Customer:default.latte), ve které mám tlačítko a to volá akci edit v presenteru (RecordPresenter:actionEdit()). K této akci se samozřejmě váže i šablona Record:edit.latte.

Potřeboval bych, aby se před samotným vykonáním akce a rendrováním Record:edit.latte provedla kontrola, zda lze/nelze editovat.

Customer:default.latte:

<?php
<a href="{link Record:edit,id=>$o->id}" class="btn btn-success"><span class="glyphicon glyphicon-pencil"></span> Upravit</a>
?>

RecordPresenter:actionEdit():

<?php
public function actionEdit()
{
  // vykonani akce edit
}
?>

Pokud dám nějakou kontrolu do samotné akce actionEdit(), tak se už přesměruje na Record:edit.latte a pak se musím vracet. Já bych ale chtěl, aby se akce vůbec nezavolala pokud neprojde nějaká kontrola předtím (povolení editace je určeno nějakým atributem v DB).

Jak to udělat?

Děkuji za každou radu.

Martin

David Matějka
Moderator | 6445
+
+2
-

actionEdit je to spravne misto, kde bys mel kontrolu provadet – pokud neni uzivatel autorizovan, tak vyhodis 403

druha vec je, ze do sablony musis dat ekvivalentni podminku, ktera zabrani vykreslovani toho edit tlacitka.

jedlicka
Člen | 70
+
0
-

Ok, díky.

Ale jak zabrání rendrování šablony (při zavolání akce edit) edit.latte pro (url .../record/edit/)?
Já vůbec nechci, aby se mi změnilo url (zůstalo se pořád v Customer:default), pokud není editace povolena.

David Matějka
Moderator | 6445
+
0
-
throw new Nette\Application\ForbiddenRequestException;

Já vůbec nechci, aby se mi změnilo url

tak tam to tlačítko vůbec nevykresluj. případně vykresli a po kliknutí to třeba zobrazí nějaký alert