nette debug bar jak ho jednoduše vypneme a kde?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mirek_R
Člen | 22
+
0
-

Dobrý den
mám dotaz ohledně Debug Baru v rohu stránky .
Kde je možnost ho vypnout aby se mě nezobrazoval díky Mirek.

Čelo
Člen | 42
+
0
-

Například v bootstrapu po nastartování aplikace zavolat:

Debugger::$bar = null;

doplň namespace (\Nette\Diagnostics\ ) případně prefix dle potřeby.

Editoval Čelo (16. 2. 2012 12:21)

Mirek_R
Člen | 22
+
0
-

počkej a kam to mám napsat ? jsem začátečník . do jakého souboru . a vložím tam jenom
" Debugger::$bar = null;" ? Díky sorry

hrach
Člen | 1838
+
0
-

díky sorry, kam jak co proc? vsechno bylo napsano, napr. v bootstrapu po nastartovani aplikace. Nejsem zacatecnik, prosim.

Mirek_R
Člen | 22
+
0
-

v bootstrap napíšem

namespace \Nette\Diagnostics
Debugger::$bar = null;

ale nefunguje to

juzna.cz
Člen | 248
+
0
-

na to same jsem se tady nekde nedavno ptal, v nette 2.0 stable to nejde :(

k23
Člen | 13
+
0
-

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
+
0
-

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
+
0
-

Š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
+
0
-

Můžu se zeptat proč to potřebuješ vypnout v komponentě / renderNěco v presenteru?

oldrich.valek
Člen | 21
+
0
-

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)