[2009-06-20] Nette Debug Console a další novinky
- David Grudl
- Nette Core | 8227
Ve třídě Debug se objevilo pár novinek.
V „bluescreen“ bylo rozšířeno zabalování a rozbalování dumpovaných argumentů + několik dalších vizuálních vylepšení:
Především však se objevila Nette Debug Console, tedy vyskakovací okénko, do kterého lze dumpovat.
Debug::consoleDump($arr, 'Titulek');
Jde vlastně o alternativu pro fireBug konzoli, kde dumpování není přiliš přehledné.
Dumpování má podporu ve filtru CurlyBracketsFilter, lze buď vypsat
konkrétní proměnnou {dump $var}
nebo vypsat všechny lokální
proměnné {dump}
a usnadnit tak ladění šablon:
- Patrik Votoček
- Člen | 2221
Super hračička… Hned se bude pracovat lépe. Bude podpora pro dibi? Něco
jako dibi::dumpLastQuery();
?
Editoval vrtak-cz (21. 6. 2009 1:12)
- jasir
- Člen | 746
David Grudl napsal(a):
Malinký nápad, ale byla to fuška ;) Je to tam.
Moc děkuji, perfektní. :) Fuška na 1 řádek, tak se pozná
Pan Programátor ;-).
Mám ještě jeden dotaz – když používám
Debug::consoleDump()
před fází render, vyhodí
to
<pre>
InvalidStateException
Cannot set HTTP code after HTTP headers have been sent (output started at
C:\WORK\projects\adastra-nette\libs\Nette\Debug.templates\console.phtml:186).
</pre>
což „mírně“ zhoršuje použitelnost… Je
Debug::dumpConsole()
použitelné pouze od fáze render dále nebo
dělám něco špatně nebo je to na fix? Díky …
- David Grudl
- Nette Core | 8227
Protože komunikace probíhá přes HTML, tak po vytvoření console skutečně už nelze odesílat hlavičky. Jediným řešením je před dumpConsole() uvést ob_start().
- Inza
- Člen | 330
David Grudl napsal(a):
Protože komunikace probíhá přes HTML, tak po vytvoření console skutečně už nelze odesílat hlavičky. Jediným řešením je před dumpConsole() uvést ob_start().
A nešlo by konzolu udělat lazy? Jako že když ji zavolám tak si tento fakt nette někam uloží a potom ji přidá až na konec výstupu? – a asi i do errorHandleru abych ji viděl i když se zastaví běh..
Bylo by to možné? nebo je v mé úvaze nějaký závažný bug?
Další alternativou je aby Debug::dump obalil výstup nějakou hezkou classou a napsat např. v JQuery hračku, která po načtení stránku projede a všechny debug výstupy v ní najde, požere a vyhodí do nového debug okýnka… – s tím, že by nette tuto hračku potom zapnulo jako prví JS na stránce…
Co vy na to? – Možná by se to ale asi hodilo spíš do extras, nevím je to takový nápad jak obejít to že po vytvoření konzole, už nepošlu hlavičky, což je celkem omezení…IMHO
- David Grudl
- Nette Core | 8227
Inza napsal(a):
A nešlo by konzolu udělat lazy? Jako že když ji zavolám tak si tento fakt nette někam uloží a potom ji přidá až na konec výstupu? – a asi i do errorHandleru abych ji viděl i když se zastaví běh..
Hele to není špatný nápad. Je to tam ;)
Další alternativou je aby Debug::dump obalil výstup nějakou hezkou classou a napsat např. v JQuery hračku, která po načtení stránku projede a všechny debug výstupy v ní najde, požere a vyhodí do nového debug okýnka… – s tím, že by nette tuto hračku potom zapnulo jako prví JS na stránce…
To taky není špatný nápad. Ale jQuery použít nelze (zbytečná závislost) a bez něj se mi to programovat nechce ;)
- Inza
- Člen | 330
Díky moc Davide! Mám ještě několik postřehů:
Hrozně rád používám jak Debug::dump tak i Debug::consoleDump v tomto kontextu:
$foo = Debug::dumpConsole(barMethod());
Ale mám s consoleDumpem problémek (jestli je stejný problémek i s normálním dumpem nevím, netestoval jsem) – ale občas mi to přetypuje vstup, nebo v případě, že vložím array s jedním prvkem, vrátí string a mě pak zkolabuje typová kontrola. Také občas neudrží třídu. Šlo by to nějak fixnout?
Další věc, že když chci dumpnout booleanovou proměnnou a ona je false, nic se nezobrazí. Když to dumpuju před normální dump tak je to ok.
A potom pár feature requestíků:
Když mám AJAXový požadavek tak mi ho tato konzola zhroutí, šlo by udělat, že by v případě detekce AJAXového požadavku by ta konzola byla tichá, popř, že by se zachovala jako normální Debug::dump?
A na závěr jeden takový dotaz, možná je zcela zcestný, ale stejně: Mám jako programátor hrozně rád co nejméně psát a moc se mi líbí že Debug::dump má 11 písmenek… ale Debug::consoleDump jich má 18, což je ksoro o 10 víc;-) – Tak mám takovou kacířskou myšlenku – od té doby co přibyla do Nette tato featurka (consoleDump), tak starší Debug::dump vůbec nepoužívám (tedy kromě AJAXu, ale o tom jsem mluvil výše) – a to z ěkolika důvodů – Debug::dump mi vždycky rohzodil layout stránky, potom se mi neustále zobrazoval pomocí CSS stylů stránky a tak a nebylo to ono. S consoleDumpem je to jiné, lepší a více nice;-) A tak mě napadlo zda nepoužít consoleDump jako výchozí chování pro normální dump – popřípadě, pokud chceme zachovat možnost toho notmálního dump, udělat statický booleanovský atribut třídy Debug, který by se jednou např. v bootstrapu) nastavil a laděnka by používala defaultně consoleDump jako dump…
A ještě jeden feature requestík: Jak moc těžké je udělat, aby se to okénko samo resizovalo podle obsahu? – Samozřejmě s nějakým maximem (a to by také mohlo býti nastavitelné formou statického atributu třídy Debug)…
Co si o tom myslíš? A i vy ostatní?
Potom má několik věcí k Profileru: Bylo by možné podobně jako je realizováno zde oddělování částí pomocí titulků realizovat podobnou věc i v profileru na countery? A také zda by tyto oblasti mohly bát zavíratelné – potom by totiž mohl být profiler úplně super killer, páč by ani nepřekážel a zároveň ukazoval tolik informací kolik je potřebných…
- Honza Marek
- Člen | 1664
Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.
- Inza
- Člen | 330
Honza M. napsal(a):
Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.
Ok, dostals mě:-) – píšu rád;-) – a CTRL + Mezerník taky používám a používám moc rád – ale stejně…
- Jan Tvrdík
- Nette guru | 2595
Feature request: Přidat podporu pro zavření okna s konzolí na klávesu
Esc
.
Editoval Jan Tvrdík (15. 7. 2009 10:07)
- David Grudl
- Nette Core | 8227
Inza napsal(a):
Ale mám s consoleDumpem problémek (jestli je stejný problémek i s normálním dumpem nevím, netestoval jsem) – ale občas mi to přetypuje vstup, nebo v případě, že vložím array s jedním prvkem, vrátí string a mě pak zkolabuje typová kontrola. Také občas neudrží třídu. Šlo by to nějak fixnout?
consoleDump vrací vždy NULL – klidně to změním na vstupní proměnnou, ale tvůj popis chování mi na to nesedí. Nemůže být problém jinde?
Další věc, že když chci dumpnout booleanovou proměnnou a ona je false, nic se nezobrazí. Když to dumpuju před normální dump tak je to ok.
Debug::consoleDump(FALSE)
mi funguje…
A potom pár feature requestíků:
Když mám AJAXový požadavek tak mi ho tato konzola zhroutí, šlo by udělat, že by v případě detekce AJAXového požadavku by ta konzola byla tichá, popř, že by se zachovala jako normální Debug::dump?
V AJAXu to fungovat nebude, to je jasné, jen si nejsem docela jistý, jestli by bylo nahradit to za Debug::dump() rozumné. To spíš Debug::fireDump.
>
A na závěr jeden takový dotaz, možná je zcela zcestný, ale stejně: Mám jako programátor hrozně rád co nejméně psát a moc se mi líbí že Debug::dump má 11 písmenek… ale Debug::consoleDump jich má 18, což je ksoro o 10 víc;-)
Zkus
function d($var) { return Debug::consoleDump($var); }
A ještě jeden feature requestík: Jak moc těžké je udělat, aby se to okénko samo resizovalo podle obsahu? – Samozřejmě s nějakým maximem (a to by také mohlo býti nastavitelné formou statického atributu třídy Debug)…
Pro mě ano, nejsem JavaScriptový odborník ;) Takže když to někdo naprogramuje, proč ne.
- David Grudl
- Nette Core | 8227
Jan Tvrdík napsal(a):
Feature request: Přidat podporu pro zavření okna s konzolí na klávesu
Esc
.
Je to tam.
- mancze
- Člen | 58
Honza M. napsal(a):
Jednak se divim, že Inzo nerad píšeš. A druhak prohlašuju, že opravdickej programátor napíše první tři písmenka a zmáčkne ctrl + mezerník i kdyby měl „dum“ do konce chybělo už jen „p“.
No, a ještě pokročilejší mačkaj ctrl + mezerník i u právě vytvářených proměnných. Ta klávesová zkratka je jako droga!
- Honza Marek
- Člen | 1664
Copak proměnný, tam se ještě krotim. Ale u metod a funkcí to obvykle
nezvládnu. Zvlášť u takových jako jsou
createComponentNazevForm
;-)