Makro {ifAllowed}{/ifAllowed}
- enumag
- Člen | 2118
Vzhledem k tomu, že Nette stejně bude rozděleno na několik repozitářů a každý z nich bude velmi pravděpodobně fungovat jako extension je to imho dobře. Kromě toho to že je to nyní jako extension nijak nebrání případné budoucí integraci. A nyní je to tak určitě lepší protože kvůli tomu nemusím udržovat vlastní fork.
Editoval enumag (28. 1. 2013 9:28)
- mr.mac
- Člen | 87
To běžně používám, ale u href přidá mi nesmyslné opakování stejného presenteru a akce, viz příklad:
<a n:if="$user->isAllowed('Resource','action')" n:href="Resource:action, $id, ...">
Ideální by bylo to napsat jen jednou, např. takto (proboha nechytej mě za slovo):
<a n:ifAllowed('Resource','action', array($id, ...))>
- Jan Tvrdík
- Nette guru | 2595
@mr.mac: To má moc velký WTF faktor. Proč by mělo
makro n:ifAllowed
generovat atribut href
?
- Jan Tvrdík
- Nette guru | 2595
Pořád mi to přijde moc krkolomné, aby to bylo v Nette. Nicméně jako rozšíření super.
- mr.mac
- Člen | 87
Dovolím si nesouhlasit, aby to nebylo součástí Nette. Asi Nette nepoužívám jako většina lidí, ale píšu v něm poměrně rozsáhlou firemní aplikaci (ne jen webovky) a prakticky v každé šabloně mám několik prvků, které musím ošetřovat zda má aktuální user na ně právo či ne a podle toho mu prvek zpřístupnit či ne, je to hroznej vopruz pořád dokola psát poměrně dlouhý zápis a nesplést se (buď to mám ok v isAllowed a blbě v n:href a nebo naopak). V Nette šablonách je spousta maker, která usnadňují formátování výstupu (některé pořád ještě chybí – označení textu při kliknutí do inputu apod.) a jinak pomáhají v prezentační části, ale tohle se týká funkcionality a není to pořádně řešeno.
- enumag
- Člen | 2118
@llook: Nikoli, mé řešení není takto omezené.
Podle Presenter:action
se najde reflexe a z ní anotace kde mám
tu resoure+privilege:
/**
* @Allowed("Resource", "privilege")
*/
public function actionDefault() { ... }
To mi dovoluje též automatickou kontrolu v checkRequirements.
Reálně to vypadá trochu jinak protože používám Kdyby/Annotations a ty mají mírně odlišnou syntaxi, ale to už je detail.
@mr.mac: V Nette imho tohle není potřeba, jako extension mi to dává lepší smysl. Ne každý to ocení a mnohem raději si do aplikace nainstaluju spoustu malých extesions než abych používal jeden obří framework kde je všechno „nějak“, ale kdoví jestli správně. Extensions jsou snadno nahraditelná, u součástí frameworku je to horší.
- mr.mac
- Člen | 87
Když bude extension dobře udělané a zdokumentované (což je často velká potíž, proto ty rozsáhlé diskuse komu co chodí/nechodí a hledání chyb), tak proti tomu nic nemám. Nejsem však natolik pokročilý uživatel, abych si makro psal sám a některé implementace sice možná existují (nevím kde), ale co jsem našel na fóru není moc zdokumentované – tedy jak to implementovat. Nebo to má být součástí Nette dokumentace – jak psát vlastní extensions, jak je implementovat? – nějaký standardizovaný postup by to chtělo.
Editoval mr.mac (30. 12. 2013 16:50)