nette debug bar jak ho jednoduše vypneme a kde?
- k23
- Člen | 13
Stačí v metodě beforeRender zavolat
\Nette\Diagnostics\Debugger::$bar = FALSE;
a je to :)
pozn. nepokoušejte se o to v bootstrapu, jinak vám to skape na vyjímce, že container ten debugbar k něčemu potřebuje. Důležité je prostě nechat vytvořit aplikaci a potom to teprve vypínat (proto ten beforeRender).
Editoval k23 (23. 3. 2012 12:21)
- artvandal
- Člen | 6
pokud potrebujete vypnout debug bar v bootstrapu, tak nejrychlejsi a zaroven ciste reseni je:
\Nette\Diagnostics\Debugger::$bar = new DummyBar();
kde DummyBar implementuje obe metody originalni tridy \Nette\Diagnostics\Bar. Napr.:
class DummyBar extends \Nette\Object
{
public function addPanel(\Nette\Diagnostics\IBarPanel $panel, $id = NULL)
{
return $this;
}
public function render()
{
}
}
- oldrich.valek
- Člen | 21
Šlo by ho nějak vypnout jen v komponentě? (případně v renderNěco v presenteru?) Nějak se mi to nedaří… (Nette 2.1.0)
Editoval oldrich.valek (16. 1. 2014 19:50)
- Patrik Votoček
- Člen | 2221
Můžu se zeptat proč to potřebuješ vypnout v komponentě / renderNěco v presenteru?
- oldrich.valek
- Člen | 21
oldrich.valek napsal(a):
Patrik Votoček napsal(a):
Můžu se zeptat proč to potřebuješ vypnout v komponentě / renderNěco v presenteru?
Tak uznávám, že to potřebuji kvůli tomu, že se mi nepodařilo vyřešit problém korektně. Zabudoval jsem si do webu http://elfinder.org/. Mám to jako komponentu. (která se vykreslí do úplně prázdné šablony)
Teď k jádru mého možná postiženého pudla. Když je zobrazen debug bar (v debug módu) tak mi ze serveru chodí vadný json (kvůli kódu debug baru). Vím že je to čistě jen tím, že jsem PHP konektor který s elfinderem dodávají nepřepsal do nette, ale jen jsem to tak nějak propojil s elfinder PHP částí, která zůstala beze změny (kromě namespace). V ní tedy není nic jako:
$presenter->sendResponse(new JsonResponse($array));
ale spíš toto:
exit($data);
Zkoušel jsem to nahradit, ale nepodařilo se mi to rozchodit. Protože tohle je jediná věc, která mi na tom nefunguje, tak jsem to vzdal a pokoušel se prostě jen vypnout ten debug bar.
Myslím že tato metoda output v elFinderConnector.class.php se stará o výstup. Nejspíš jde o to do ní dostat $presenter. Dělal jsem s tím asi před rokem a nepodařilo se mi to. (Nejspíš je to triviální, ale jsem lamka.)
/** * Output json * * @param array data to output * @return void * @author Dmitry (dio) Levashov **/ protected function output(array $data) { $header = isset($data['header']) ? $data['header'] : $this->header; unset($data['header']); if ($header) { if (is_array($header)) { foreach ($header as $h) { header($h); } } else { header($header); } } if (isset($data['pointer'])) { rewind($data['pointer']); fpassthru($data['pointer']); if (!empty($data['volume'])) { $data['volume']->close($data['pointer'], $data['info']['hash']); } exit(); } else { if (!empty($data['raw']) && !empty($data['error'])) { exit($data['error']); } else { exit(json_encode($data)); } } }
Takhle vypadá část komponenty kde volám jejich kód:
function handleConnector() { \Nette\Diagnostics\Debugger::$bar = FALSE; // toto nefunguje $opts = array( 'locale' => 'cs_CZ.utf8 ', 'roots' => $this->roots ); header('Access-Control-Allow-Origin: *'); $connector = new Connector\elFinderConnector(new Connector\elFinder($opts), true); $connector->run(); }
Tak jsem to snad vyřešil. Do elFinderConnector.class.php jsem přidal private $presenter. A předám ho tam v konstruktoru. V metodě output už ho pak mohu použít. Nejsem si zcela jist co všechno se tam vlastně provádí, ale tohle zdá se funguje:
/**
* Output json
*
* @param array data to output
* @return void
* @author Dmitry (dio) Levashov
**/
protected function output(array $data) {
$header = isset($data['header']) ? $data['header'] : $this->header;
unset($data['header']);
if ($header) {
if (is_array($header)) {
foreach ($header as $h) {
header($h);
}
} else {
header($header);
}
}
if (isset($data['pointer'])) {
rewind($data['pointer']);
fpassthru($data['pointer']);
if (!empty($data['volume'])) {
$data['volume']->close($data['pointer'], $data['info']['hash']);
}
exit();
} else {
if (!empty($data['raw']) && !empty($data['error'])) {
exit($data['error']);
} else {
// exit(json_encode($data));
$this->presenter->sendResponse(new JsonResponse($data));
}
}
}
Editoval oldrich.valek (25. 1. 2014 15:05)