ifCurrent pro všechny action vyhodí vyjímku

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

Mám v šabloně:

{ifCurrent :Options:Backend:*}...{/if}

A laděnka pořád hlásí:

InvalidLinkException
No route for Options:Backend:*(lang=en)

Nechápu proč. Tohle by podle docky fungovat mělo. Hlavně když mám odkazy :Options:Backend:add apod. fungujou bez nejmenších problémů. (používám aktuální revizi z SVNka)

_Martin_
Generous Backer | 679
+
0
-

Ahoj, koukám, že problém vyšumněl a já teď zrovna řeším to samé: se SimpleRouterem vše funguje, jak má. Ale jak zapnu normální routy, vše jde do kytiček a jsem na tom jak kolega. Děkuji Davídku, že se na to podíváš=)

_Martin_
Generous Backer | 679
+
0
-

Tohle téma zdá se potkal osud Města duchů… =( Najde se odvážný vysvoboditel?

Ola
Člen | 385
+
0
-

Je to kvůli nastavení Presenter::$invalidLinkMode = Presenter::INVALID_LINK_EXCEPTION;

Zkus tam dát INVALID_LINK_SILENT a vše by mělo fungovat.

Editoval Ola (12. 9. 2009 9:07)

_Martin_
Generous Backer | 679
+
0
-

V první řadě děkuji, je to přesně kvůli tomu – s nastavením Presenter::INVALID_LINK_WARNING a Presenter::INVALID_LINK_SILENT vše funguje.

Ovšem domnívám se, že jde o broučka v Nette. Myslím si, že implementovat nějaké elegantní systémové řešení (které rozliší mezi požadavkem kvůli ověření flagu current a požadavkem kvůli vytvoření odkazu) by bylo velice složité. Navrhuji tedy upravit makro filtru LatteMacros následovně:

'ifCurrent' => '<?php try {%:macroIfCurrent%;} catch (Exception $e) {} if ($presenter->getLastCreatedRequestFlag("current")): ?>',

Uznávám, že tím přijdeme o zobrazení chybové hlášky v případě, že bychom do podmínky zadali neexistující presenter. Ovšem to při použití jakéhokoliv Presenter::INVALID_LINK_* – takže se tím nic nemění, akorát můžeme používat i vyhazování výjimek při nefunkčních odkazech.

David Grudl
Nette Core | 8107
+
0
-

fixed