Zobrazení vlastní 500 šablony nejde přes error presenter

tkotasek
Člen | 15
+
0
-

Zdravím a chci se zeptat, zda se někomu v Nette 3.0 nebo 3.1 podařilo rozjet zobrazení vlastní chybové stránky 500.

Mi se to tedy povedlo po dvou dnech zkoumání jen přes config sekce tracy, ale nepřijde mi to jako optimální varianta, když v ErrorPresenteru je callback s require souboru, který nenačte.

Mám projekt na Nette 3.1, ale i když si vezmu čisté zdrojaky z dokumentace „začínáme“ je to stejné.

composer create-project nette/web-project nette-blog
nebo
composer create-project nette/sandbox

Config.neon mám default:

application:
	catchExceptions: yes (nebo true)
	errorPresenter: Error

Struktura výchozí, ErrorPresentery výchozí, vypnutý debug mod.

Chyba 404 projde v pohodě přes ErrorPresenter do Error404Presenter, načte se 404.latte

Pro test chyby 500, nastavím špatné připojení DB ale na moji 500.phtml to nikdy nepropadne.
Jediná varianta jak dostat svou 500 stránku je nastavit v configu

tracy:
	errorTemplate: .../500.phtml

Pokud toto nenastavím, načte se 500.phtml přes Tracy\Debugger\Debugger.php line 333 když existují i neexistují jakékoliv ErrorPresentery.

require self::$errorTemplate ?: __DIR__ . '/assets/error.500.phtml';

uvnitř funkce

public static function exceptionHandler(\Throwable $exception): void

Když jsem zkoušel co vrací Callbacky v ErrorPresenteru dostanu
u 404

object(Nette\Application\Responses\ForwardResponse)#407 (1) {
["request":"Nette\Application\Responses\ForwardResponse":private]=>
object(Nette\Application\Request)#408 (6) {

u 500

object(Nette\Application\Responses\CallbackResponse)#28 (1) {
["callback":"Nette\Application\Responses\CallbackResponse":private]=>
object(Closure)#29 (2) {

Otázka zní.. Co dělám špatně, že mi ErrorPresenter nenačte šablonu 500.phtml :)

Ozzrel
Generous Backer | 54
+
0
-

Možná střílím vedle. Ale zkusil jsi smazat cache? U errorových stránek to je dost agresivně nakešovaný.

tkotasek
Člen | 15
+
0
-

Ozzrel napsal(a):

Možná střílím vedle. Ale zkusil jsi smazat cache? U errorových stránek to je dost agresivně nakešovaný.

Tu jsem smazal asi 10000× za poslední týden, bohužel :(

Michal Kumžák
Člen | 106
+
0
-

Tak sem to teď ozkoušel a udělal sem tuto změnu v ErrorPresenteru, aby mi chyby fungovaly

$this->template->setFile(__DIR__ . '/../templates/Error/' . $code . '.latte');
//$this->setView(in_array($code, array(403, 404, 405, 410, 500)) ? $code : '4xx');

Řádek se setView nefungoval, nevím proč, a ani nevím jak má fungovat, tak sem ho nahradil rádkem nad a už to fungovalo vše správně.

David Grudl
Nette Core | 8228
+
0
-

Zkoušel jsi to se zapnutým debug modem? A co se zapisuje do logu?

tkotasek
Člen | 15
+
0
-

Pokud zapnu debug, vyskočí laděnka v sekci Call Stack je sekce níže.
Do nette log adresáře nic.

Snažil jsem se trasovat jak to prochází skrz inicializaci. Pokud to jde na chybu 404, dojde to bez problémů na ErrorPresenter a pak na Error4xxPresenter, ale při 500 prostě ne.

Fakt netuším.

.../vendor/dibi/dibi/src/Dibi/Connection.php:147   Dibi\Drivers\MySqliDriver->__construct ()
.../vendor/dibi/dibi/src/Dibi/Connection.php:233   Dibi\Connection->connect ()
.../vendor/dibi/dibi/src/Dibi/Connection.php:221   Dibi\Connection->translate ()
.../vendor/dibi/dibi/src/Dibi/Fluent.php:388   Dibi\Connection->query ()
.../vendor/dibi/dibi/src/Dibi/Fluent.php:337   Dibi\Fluent->query ()
/var/www/html/app/Models/RoutesModel.php:20   Dibi\Fluent->fetchAll ()
.../www/html/app/router/RouterFactory.php:19   App\Model\RoutesModel->getAllRoutes ()
.../Container_0b5e0d6a30.php:579   App\Router\RouterFactory::createRouter ()
.../vendor/nette/di/src/DI/Container.php:210   Container_0b5e0d6a30->createService01 ()
.../vendor/nette/di/src/DI/Container.php:126   Nette\DI\Container->createService ()
.../Container_0b5e0d6a30.php:1745   Nette\DI\Container->getService ()
.../vendor/nette/di/src/DI/Container.php:210   Container_0b5e0d6a30->createServiceTranslation__localeResolverRouter ()
.../vendor/nette/di/src/DI/Container.php:126   Nette\DI\Container->createService ()
.../Container_0b5e0d6a30.php:1752   Nette\DI\Container->getService ()
.../vendor/nette/di/src/DI/Container.php:210   Container_0b5e0d6a30->createServiceTranslation__tracyPanel ()
.../vendor/nette/di/src/DI/Container.php:126   Nette\DI\Container->createService ()
.../Container_0b5e0d6a30.php:1832   Nette\DI\Container->getService ()
.../bootstrap/src/Bootstrap/Configurator.php:257   Container_0b5e0d6a30->initialize ()
/var/www/html/public/index.php:23   Nette\Bootstrap\Configurator->createContainer ()