Nette:Debug – nastavení zobrazení

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

Zdravím,
provizorně jsem nasadil Debug na starší aplikaci která není napsána v Nette.
Můj „problém“:
pokud jsem to dobře pochopil, tak Debug v produkčním prostředí (Debug::enable(TRUE);) zapisuje chyb do souboru, ale k uživateli se vrátí pouze prázdná stránka. Jde Debug nějak přimět k tomu, aby po zalogování chyby zavolal nějakou metodu, nebo případně poslal na výstup HTML soubor aby návštěvník nemusel koukat na prázdnou stránku?

Díky za všechny odpovědi
T.

_Martin_
Generous Backer | 679
+
0
-

Ahoj, pokud by ti stačilo zachytit a zpracovat pouze výjimky, použij něco takového:

// index.php
Debug::enable(Debug::DETECT);

try {
	// běh aplikace
} catch (Exception $e) {
	// vlastní zpracování chyby
	Debug::processException($e);
}
Tomas
Člen | 3
+
0
-

Děkuju za nápad, bohužel nefunguje.
Pokud vytvořím chybu:

# index.php
<?php
require_once 'loader.php';
Debug::enable(Debug::PRODUCTION);

try {
  require_once 'class_with_Bug.php';
  Bug::Vypis();
} catch (Exception $e) {
  echo 'Máš tam chybu, voe!';
  Debug::processException($e);
}

#class_with_Bug.php
<?php
class Bug {
  private static function Vypis() {
    echo 'Chráněná metoda :)';
  }
}

tak se stejně objeví jenom prázdná stránka :(

Ondřej Mirtes
Člen | 1536
+
0
-

Nevím, který level chyby se vyhodí, pokud přistupuješ k zapouzdřené metodě, ale Laděnka potřebuje být pro zachycování Parse/Fatal errorů includována v jiném souboru, než ve kterém se ta chyba děje. Takže includování loader.php vystrč ještě mimo ten soubor, který chybu vyvolává :)

kravčo
Člen | 721
+
0
-

Tomas napsal(a):

… tak se stejně objeví jenom prázdná stránka :(

Lepšie na prvotné testovanie bude asi vyhodenie výnimky:

// ...

try {
    throw new Exception;
} catch (Exception $e) {
    echo 'Máš tam chybu, voe!';
    Debug::processException($e);
}

// ...

Ak ani toto nepomôže, skontroloval by som ešte output buffering…

_Martin_
Generous Backer | 679
+
0
-

Tomas napsal(a):

Děkuju za nápad, bohužel nefunguje.

Jak jsem říkal, tímhle způsobem jde zachytávat jen výjimky. Fatální chyby takto zachytit nejde. Což by vadit nemělo, předpokládám, že není velká pravděpodobnost, aby u aplikace na ostrém serveru docházelo opakovaně k fatálním chybám.

David Grudl
Nette Core | 8228
+
0
-

Přidal jsem Debug::$onFatalError

function myErrorHandler()
{
	// zobrazi nejakou stranku
	require dirname(__FILE__) . '/error.php'; // cesta ke skriptu MUSI BYT ABSOLUTNI!
}

Debug::enable();

Debug::$onFatalError[] = 'myErrorHandler';
Tomas
Člen | 3
+
0
-

Mockrát děkuju, Debug::$onFatalError funguje naprosto perfektně!