pavlista / nette-error-handler
Nette framework error pages plugin
Package info
github.com/MichaelPavlista/nette-error-handler
pkg:composer/pavlista/nette-error-handler
Requires
- php: >=8.2.0 <8.6
- nette/application: >=3.2.0 <3.4
- nette/http: >=3.3.0 <3.5
- nette/utils: >=4.0.4 <4.2
- tracy/tracy: >=2.10 <3
Requires (Dev)
- ekino/phpstan-banned-code: ^3.2
- nette/database: >=3.1.7 <3.3
- phpstan/phpstan: ^2.2
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-nette: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- rector/rector: ^2.5
- slevomat/coding-standard: ^8.22
- squizlabs/php_codesniffer: ^3.13
Suggests
- nette/database: For ErrorHandlerModule\Logger\DeadlockLogger
This package is auto-updated.
Last update: 2026-08-17 08:33:00 UTC
README
Jednoduché rozšíření Nette které zajištuje zobrazení názvu souboru se zalogovanou exception při zobrazení chyby 500 v produkčním režimu (viz. obrázek níže).
Požadavky
- PHP 8.2 – 8.5
- nette/application 3.2 – 3.3, nette/http 3.3 – 3.4, nette/utils 4.0.4 – 4.1, tracy/tracy 2.10 – 2.x (nette/application 3.3 a nette/http 3.4 samy vyžadují PHP 8.3+, na PHP 8.2 se proto použije nette/application 3.2 a nette/http 3.3)
- nette/database 3.1.7 – 3.2 (volitelně, pouze pro
ErrorHandlerModule\Logger\DeadlockLogger)
Instalace
- Nainstalujte balíček přes příkaz:
composer require pavlista/nette-error-handler. - V konfiguraci nette zaregistrujte nový error presenter.
application: errorPresenter: ErrorHandler:Error
- Do souboru boostrap.php přidejte ihned pod
$configurator->enableTracy(__DIR__ . '/../log');registraci error handleru:
ErrorHandlerModule\ErrorHandler::register();
Vlastní logger obalující Tracy logger
Modul potřebuje ke zjištění názvu souboru s chybou přístup ke standardnímu Tracy\Logger.
Pokud aplikace v Tracy registruje vlastní Tracy\ILogger, který standardní logger obaluje
(místo aby z něj dědil), zaregistrujte v bootstrapu funkci, která jej z něj získá:
ErrorHandlerModule\ErrorHandler::setLoggerResolver( static fn (Tracy\ILogger $logger): ?Tracy\Logger => $logger instanceof MyWrappingLogger ? $logger->getInnerLogger() : null, );
Bez toho vrací ErrorHandler::getErrorFile() prázdný řetězec a ErrorHandler::activateLogDispatcher()
nepřenese do LogDispatcher nastavení odesílání e-mailů (fromEmail, emailSnooze, mailer).
Resolver musí být nastaven před prvním voláním ErrorHandler::activateLogDispatcher() — nastavení
e-mailů se přenáší pouze při vytvoření LogDispatcheru a později se už nedoplní.
Pozor: ErrorHandler::activateLogDispatcher() nastaví do Tracy LogDispatcher a váš obalující logger
tím zcela nahradí — resolver z něj přenese jen zmíněné nastavení, ne jeho chování při logování.
Omezení
Vlastní chybovou šablonu předávejte výhradně přes ErrorHandler::register():
ErrorHandlerModule\ErrorHandler::register(__DIR__ . '/../app/error.500.phtml');
Nekombinujte modul s volbou errorTemplate v konfiguraci Tracy:
tracy: errorTemplate: ... # nepoužívat společně s tímto modulem
DI kontejner tuto hodnotu nastavuje až po zavolání ErrorHandler::register() v bootstrapu.
Modul si při každé kritické chybě ověřuje, že šablona v Tracy odpovídá té, kterou zaregistroval —
při rozdílu se sám deaktivuje výjimkou Tracy error template changed, error handler is disabled
a chybová stránka se nevykreslí.
Vývoj
Statická analýza běží v Dockeru nad oficiálními php:*-cli image (viz docker/Dockerfile),
takže lokálně stačí mít Docker a make:
| příkaz | co dělá |
|---|---|
make |
composer update + všechny kontroly |
make c |
všechny kontroly bez composer update |
make ps |
PHPStan (3 běhy: analýza pro PHP 8.2 i 8.5 a pojistný běh pod PHP 8.2) |
make pcs / make pcss |
PHPCS / PHPCS se souhrnem |
make r |
Rector (dry-run) |
make f |
automatické opravy (Rector + PHPCS) |
make psgb |
přegenerování PHPStan baseline |
Verzi PHP lze zvolit přes PHP=85, např. make c PHP=85. Default je nejnižší podporovaná verze.
