editor:// link vs. Latte template file

- Patrik Votoček
- Člen | 2221
Bylo by cool kdyby když dojde k chybě v šabloně tak aby link vedl na originální a né na zkompilovanou šablonu. Nevím jak moc dobře je technicky řešitelné aby vedl i na správný řádek ale to by bylo ještě víc cool.

- Mikulas Dite
- Člen | 756
Poslal jsem na to pull request. Rád bych tady zjistil, co si o tomhle řešení myslíte.
Vyřešil jsem to úpravou vyhozené výjimky. Místo obcházení pomocí
reflexí jsem udělal novou výjimku MacroException, aby šla
spolehlivě zachytávat později. Tohle řešení krapet čistší a
průhlednější. Celá aplikace se teď chová i logicky správně – chybu
takhle jako kdyby vyhazuje šablona.
Editoval Mikulas Dite (7. 11. 2010 9:08)

- jansfabik
- Člen | 193
ta myšlenka se mi líbí, ale do Nette bych to ještě nezahrnoval:
- když mám v makru PHP kód (např.
{undefinedMacro $param}), tak je označen první řádek šablony - tyhle chyby na úrovni Latte imho nejsou tak časté, častěji k chybě
dojde až po zkompilování (třeba
{foreach $var}vyvolá Parse Error, {$undefined} → Notice)

- Mikulas Dite
- Člen | 756
jansfabik napsal(a):
- když mám v makru PHP kód (např.
{undefinedMacro $param}), tak je označen první řádek šablony
Jo to byla blbost, už sem to fixnul
- tyhle chyby na úrovni Latte imho nejsou tak časté, častěji k chybě dojde až po zkompilování (třeba
{foreach $var}vyvolá Parse Error, {$undefined} → Notice)
No, to si mi to zavařil ; ). Kvůli parse error a notice jsem to ale celé
přepsal do Debug.php. Ale díky, hodně jsem to kvůli tomu
vylepšil.
Podpora pro chyby:
{$undefined}–Undefined variable '$undefined'.{=undefined()}–Called undefined function 'test'.{/foreach}–Unopened macro 'foreach'.{foreach}–Invalid macro 'foreach'.{cache}–Unclosed macro 'cache'.- atd.
Nový Screenshot: http://d.pr/j6e
Změnil jsem původní pull request, tak si ho prosím prohlídněte https://github.com/…tte/pull/149.
Editoval Mikulas Dite (7. 11. 2010 19:18)

- jansfabik
- Člen | 193
nevím, co dělám špatně – dal jsem do sandboxu ten řádek
{=foo()} (přesně tak, jako to je na té tvé ukázce) a dopadlo
to takhle: http://ukaz.at/10a/full

- Mikulas Dite
- Člen | 756
Neuzavřené tagy (zmiňované if) jsem už commitnul, akorát
nepushnul na github.
Cachovanou verzi určitě budeme zobrazovat taky, protože prakticky není řešení jak kontrolovat custom macro. Co takhle zobrazit template, když to jde (invalid usage/unclosed/unopened/unset pro macro v distribuci), jinak se zobrazí cache (tak jako je teď, akorát s linkem na tu šablonu jak myslel Vrták původně)?
Zaseknul jsem se na tom, že parser error chyby se vyhazují v cache. To by
šlo, ale jak získám cestu k originálnímu souboru, když mám jenom cestu
k cachované verzi (ostatní se v shutdownHandleru získává hodně těžko)?
Kdyby byla cache ve formátu module_presenter.action.phtml, tak je
to v cajku, ale ta module část tam chybí.

- David Grudl
- Nette Core | 8296
Díky za pull request!
Implementace se ale musí udělat mimo třídu Debug a dostat do ní pomocí pluginu. Šablonu má asi smysl zobrazovat jen při compile-time chybách, protože u runtime chyb nelze zjistit, na kterém řádku k chybě došlo.

- Mikulas Dite
- Člen | 756
David Grudl napsal(a):
Díky za pull request!
Implementace se ale musí udělat mimo třídu Debug a dostat do ní pomocí pluginu. Šablonu má asi smysl zobrazovat jen při compile-time chybách, protože u runtime chyb nelze zjistit, na kterém řádku k chybě došlo.
Super : ). Chápu, mimo Debug to dám, to
nebude problém. Ale kam? Nejčistší by bylo na to mít zvláštní třídu v
Debug/TemplateDebug.php, ale zase se mi to zdá až moc přepych na
to, co to vlastně dělá. Další možnost je třeba i bluescreen, ale ten je
už tak dost přeplněnej. Do /Nette/Templates se to nehodí.
Funkce se v template dynamicky nepřidávají (doufám) takže správně najde i
Line 1: {=undefined()}
Mám teda z těch runtime nechat jisté (calling undefined method) a ty nespolehlivé (zápis cyklů a unset variable) odstranit/vykreslit cache?
Editoval Mikulas Dite (8. 11. 2010 19:11)

- David Grudl
- Nette Core | 8296
Zkusil jsem do poslední revize dát implementaci přes plugin Debugu, tj. výjimku TemplateException, která implementuje IDebugPanel.

- David Grudl
- Nette Core | 8296
Mikulas Dite napsal(a):
Netuším, kam jsi s implementací směřoval ty, jsou nějaké zásadní rozdíly nebo nedostatky na současném chování via IDebugPanel?

- Mikulas Dite
- Člen | 756
@dg: Já blb si nevšimnul, že to tam už je!
Delší verze:
Pořád jsem čekal na commit, který nějak výjimku s IDebugPanel spojí
s laděnkou a ono už to v Nette je. Když jsem to testoval, všimnul jsem si
jenom schovaného kódu, ale neviděl jsem tu Template sekci. Bylo by nějak
možné dát tuhle sekci nahoru – nad call stack (chci říct jestli snadno,
bez přepisování)? Ale to už je jenom detailík.
Závěr:
Díky moc (a mimochodem tahle implementace je triviální a
kupodivu přece nejlepší) : )
Edit: ještě lepší by bylo nechat tu sekci jak je, ale zavřít i call stack.
Editoval Mikulas Dite (11. 11. 2010 14:57)