Redirect v routeru při debug módu

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

Ahoj,
mám vlastní router, některé požadavky chci přesměrovat jinam – např. example.com na example.cz (detekce jazyků podle nastavení prohlížeče).

Zatím mám přesměrování řešené přes Nette\Http\Response, metodou redirect. Funguje to ale jen v případě production módu, dokud nezapnu debugbar. Přesměrování z presenteru $this->redirectUrl(…) proběhne v pořádku.

Problémy nejspíš dělá $container->enableDebugger(…), ale bez něj se mi zase nebudou logovat chyby.

Jak tedy správně přesměrovat z routeru, aby to fungovalo spolu s Tracy?

Díky

Jan Endel
Člen | 1016
+
0
-

A co se stane, když se pokusíš o přesměrování se zapnutým debug módem?

Petr Hanák
Člen | 10
+
0
-

pokud mám zaplý debug mód, tak se kód debugbaru odešle ještě před routováním, takže dostávám chybu

Possible problem: you are sending a HTTP header while already having some data in output buffer. Try OutputDebugger or start session earlier.

OutputDebugger jsem samozřejmě zkoušel, data se odesílají na již zmiňovaném enableDebugger.

Michal Vyšinský
Člen | 608
+
0
-

Ukaž kód, jak zapínáš ten debugger. (Možná celý bootstrap rovnou). Někde tam bude nějaká chyba…

Petr Hanák
Člen | 10
+
0
-
require ROOT_DIR . "/private/vendor/autoload.php";

$configurator = new Nette\Configurator;

$configurator->setDebugMode('1.2.3.4'); //development IP address
$configurator->enableDebugger(ROOT_DIR . "/private/log");
$configurator->setTempDirectory(ROOT_DIR . "/private/temp");

$configurator->createRobotLoader()
	->addDirectory(ROOT_DIR . "/private/app")
	->addDirectory(ROOT_DIR . "/private/vendor/others")
	->register();

$configurator->addConfig(ROOT_DIR . "/private/app/system/config.neon");

$container = $configurator->createContainer();
return $container;
Michal Vyšinský
Člen | 608
+
0
-

Existuje složka /private/log? je zapisovatelná? Normální načtení stránky ti chybu neháže?

Petr Hanák
Člen | 10
+
0
-

normální zobrazení – tj. bez debugbaru je v pořádku

abych minimalizoval své chyby, tak jsem si vzal čistý sandbox a upravil pouze potřebné

bootstrap.php

...
$configurator = new Nette\Configurator;

$configurator->setDebugMode(TRUE);//povolený debug
$configurator->enableDebugger(__DIR__ . '/../log');

$configurator->setTempDirectory(__DIR__ . '/../temp');
...

RouterFactory.php

<?php
namespace App;

use Nette,
	Nette\Http\Response;

class RouterFactory implements Nette\Application\IRouter
{
	function match(Nette\Http\IRequest $httpRequest)
	{
		$r = new Response();
		$r->redirect("http://google.com");
		exit;
	}

	function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl)
	{
	}
}

config.neon

...
services:
	- App\Model\UserManager
	router: App\RouterFactory
Petr Hanák
Člen | 10
+
0
-

chyba je nejspíš v souboru Tracy\templates\bar.phtml

vypisují se tam data mimo buffer – bug?