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 | 8218
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 | 8218
Zkusil jsem do poslední revize dát implementaci přes plugin Debugu, tj. výjimku TemplateException, která implementuje IDebugPanel.
- David Grudl
- Nette Core | 8218
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)