[2008-11-24] Přidán Debug::$productionMode
- David Grudl
- Nette Core | 8221
Aby bylo chování Nette\Debug lépe srozumitelné, přidal jsem přepínač Debug::$productionMode, udávající, zda Debug běží v produkčním nebo vývojovém prostředí (TODO: nenazvat ho konzistentněji $liveMode?)
Jde spíše o refactoring kódu, na funkci (rostlináře) by to nemělo mít žádný vliv :-) Výjimkou je funkce Debug::dump(), která v produkčním režimu filtruje citlivá data.
Debug je užitečný fault barrier, která umí nezachycené výjimky podle potřeby zobrazit, zalogovat do souboru, zalogovat do Firebugu nebo obeslat administrátora emailem. Dosud však byla nevyřešená otázka, jak chování rozšířit, konkrétně jak na produkčním serveru zobzrazit vlastní chybovou stránku a přitom zachovat logovací schopnosti třídy Debug. Problém se týkal i třídy Appliaction – fault barrier byla buď ona, nebo Debug.
Takže podporovaný postup je tento:
Debug::enable(); // Debug is fault barrier
set_exception_handler('myBarrier'); // set user barrier
function myBarrier($exception)
{
echo 'Something is wrong...';
Debug::processException($exception); // delegate to Debug
}
// ... application code
nebo alternativně:
Debug::enable(); // Debug is fault barrier
try {
// ... application code
} catch (Exception $e) {
echo 'Something is wrong...';
Debug::processException($e); // delegate to Debug
}
Delegování už podporuje i Application.
- ViliamKopecky
- Nette hipster | 230
Jsem pro $liveMode
První možnost by se mohla určitě zapouzdřit do Nette.
Máš chybku u alternativního příkladu: $e
vs $exception
Editoval enoice (1. 11. 2008 16:47)
- romansklenar
- Člen | 655
Já bych se spíše zase naopak naklonil k $liveMode
.
$productionMode
by mohl dělat zmatky s názvem prostředí
PRODUCTION
v Nette\Environment.
- A.
- Člen | 87
deric napsal(a):
Bylo by fajn, kdyby název byl samovysvětlující, což mi tak v případě $liveMode nepřipadá. Takže jsem pro $productionMode.
Tak tak, uz nyni je v Environmentu trochu rozepre v name vs. mode. Byl bych pro celkove zruseni live modu (kterymi mi taky neprijde samovysvetlujici) a jeho nahrazeni ustalenym vyrazem production.
- David Grudl
- Nette Core | 8221
deric napsal(a):
Bylo by fajn, kdyby název byl samovysvětlující, což mi tak v případě $liveMode nepřipadá. Takže jsem pro $productionMode.
A. napsal(a):
Tak tak, uz nyni je v Environmentu trochu rozepre v name vs. mode. Byl bych pro celkove zruseni live modu (kterymi mi taky neprijde samovysvetlujici) a jeho nahrazeni ustalenym vyrazem production.
Ok, něco na tom je.
- David Grudl
- Nette Core | 8221
A. napsal(a):
Asi se zmenila promenna useFirebug na private (popr. byl odendan seter). Zamerne? Mam firebug, ale mam ho radsi vypnuty, protoze si tech erroru jinak nevsimnu.
Zapíná a vypíná se to automaticky, jak zapneš/vypneš FirePHP.
- A.
- Člen | 87
Jo pravda, mel sem to puvodne obracene.
Jeste v souvislosti s tim ErrorPresenterem, trochu si s tim hraju, poprve se mi ErrorPresenter vykresli spravne, ale podruhe mi zkolabuje $session->start(), snazi se to volat wakeup() na objekt typu Component (tedy asi na presenter, zatim sem to nezjistoval) :-/. A zatim netusim, kde je problem, ten error presenter nic nedela.
EDIT: Hmm, tak je to nejaka normalni komponenta, kterou mam na strance v layoutu. Ale proc se vola __wakeup to fakt nechapu, a kdyz odstranim to vyhozeni vyjimky z wakeup tak to funguje :-/.
Editoval A. (26. 11. 2008 0:17)
- David Grudl
- Nette Core | 8221
A. napsal(a):
Jo pravda, mel sem to puvodne obracene.
Jeste v souvislosti s tim ErrorPresenterem, trochu si s tim hraju, poprve se mi ErrorPresenter vykresli spravne, ale podruhe mi zkolabuje $session->start(), snazi se to volat wakeup() na objekt typu Component (tedy asi na presenter, zatim sem to nezjistoval) :-/. A zatim netusim, kde je problem, ten error presenter nic nedela.
Zkopíruj sem celý callstack.