dump do laděnky – jde to?
- mildabre
- Člen | 62
Zatím jsem ještě nenašel odvahu si do Netbeans které díky bohu fungují i s pluginem pro Nette doinstalovat Xdebug a tak občas dumpuji.
Při použití dump() se mě data vypisují přímo do stránky tak jako za mlada když jsem si psal aplikace v čistém PHP. Napadlo mě, zda by nebylo možné výstup tohoto dump()-u nějak přesměrovat do dalšího panelu v DebugBaru – laděnce Nette, podobně jako tam jsou schované provedené SQL dotazy. Tak, že by se dal rozbalit do další vrstvy nad webovou stránku.
Neví někdo zda toto jde či ne ?
- Filip Procházka
- Moderator | 4668
Doporučuji
function bd($var, $title = NULL) {
Nette\Diagnostics\Debugger::barDump($var, $title);
}
- enumag
- Člen | 2118
@HosipLan: Netušíš náhodou proč se pole vypisuje po složkách a ne najednou? Dost mne to irituje, protože když dumpuju pole, které je náhodou prázdné tak vidim velký …nic.
- Filip Procházka
- Moderator | 4668
Netuším, ale nějak mně to nikdy netrápilo. Napiš si k tomu titulek, ten se ukáže vždy.
- enumag
- Člen | 2118
Na psaní titulků při každém dumpu jsem línej, kromě toho mi tam také chyběla informace, kde ten dump byl zavolán. Zde je výsledek: ;-)
function bd($var)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
$title = pathinfo($caller['file'], PATHINFO_BASENAME) . ':' . $caller['line'];
if (is_array($var) && empty($var)) {
$var = array('[]' => array());
}
Debugger::barDump($var, $title);
}
EDIT: Anebo raději takhle?
/**
* Nette\Diagnostics\Debugger::barDump shortcut.
* @param mixed $var
*/
function bd($var)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
$title = pathinfo($caller['file'], PATHINFO_BASENAME) . ':' . $caller['line'];
if (is_array($var) && empty($var)) {
$title .= ' [empty]';
}
Debugger::barDump($var, $title);
}
EDIT2: Anebo ještě o něco lépe. Že já z toho neudělal Gist hned na začátku… :-D
Editoval enumag (11. 12. 2012 23:30)
- enumag
- Člen | 2118
Nestačí, mám to už dlouho zapnuté, ale location u barDumpu mi to nikdy neukazovalo. Tohle má význam pouze u dumpu, nikoli u barDumpu a to ještě pouze pokud se dumpuje přímo na výstup.
Z tvých komentářů je vidět, že barDump zřejmě téměř nepoužíváš. Co tedy používáš? Xdebug?
- Filip Procházka
- Moderator | 4668
Používám ho docela hojně, ale asi mám jiné workflow, které mě od těchhle divných problémů odstiňuje ;)
- mildabre
- Člen | 62
Díky všem za objasnění že s dumpem lze jít do debugbaru což je elegantní a už mne to u Nette ani nepřekvapuje – kolikrát už jsem si řekl chtělo by to tohle či ono vylepšení a ejhle ono to v Nette už je, jenom o tom vědět.
Kdosi kdysi řekl k otázce jak ladit PHP aplikace, že se snaží kód napsat tak, aby ladit nemusel. Komu se to podaří je odstíněn od diskuzí kam vyplivnout dump().
- LeonardoCA
- Člen | 296
Mně chyběl u dumpů často trace, tak jsem si udělal ještě trochu sofistikovanější výpis.
Například:
public function addEditButton($control, $signal = 'Edit')
{
sdump($this->primaryKey);
$this->AddContent(Html::bsButton('a', ' Edit ', 'btn-mini btn-primary', Html::bsIconw('edit'))
->href($control->lazyLink($signal, $this->primaryKey))
);
return $this;
}
zobrazí jako title název metody a v dump info, co přesně jsem do dumpu
napsal, protože tam někdy píšu pole nebo i výrazy, u kterých si nejsem
jistý výsledkem
a v config.neon si nastavím jakou hloubku trace chci vidět. Standartně
používám 2, ať vím odkud byla daná metoda kde mám dump volána.
Má to ještě pár much, proto jsem to zatím nezveřejnil.
Editoval LeonardoCA (13. 12. 2012 2:40)
- Filip Procházka
- Moderator | 4668
@LeonardoCA dump info a trace bych sloučil, jinak je to super. Než si to vymazlíš, tak jsem si zatím upravil svou :)
function bd($var, $title = NULL) {
if ($title === NULL) {
$trace = debug_backtrace();
$title = (isset($trace[1]['class']) ? htmlspecialchars($trace[1]['class']) . "->" : NULL) .
htmlspecialchars($trace[1]['function']) . '()' .
':' . $trace[0]['line'];
}
return Nette\Diagnostics\Debugger::barDump($var, $title);
}