Vlastní ERROR šablona na produkčním režimu se nenačte, přebije jí defaultní šablona

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

Zdravím,
nemůžu za žádné kombinace donutit nette v produkčním režimu používat moje vlastní šablony pro error, je to svým způsobem duplicate topic, ale žádné řešení z předchozích diskuzí mi prostě nepomohlo, nevím kde už bych měl hledat chybu.

config.neon:

application:
    catchExceptions: true
    errorPresenter: Error
    mapping:
        *: App\*Module\Presenters\*Presenter

bootstrap.php:

<?php
use Nette\DI\Container;
use Nette\Http;

require _DIR_ . '/../vendor/autoload.php';
ini_set('memory_limit', '-1');
SetLocale(LC_ALL, "Czech");
$configurator = new Nette\Configurator;
$container = New Container();
$configurator->setDebugMode(false); // Comment for Error Presenter
//$configurator->setDebugMode('23.75.345.200'); // enable for your remote IP
$configurator->enableDebugger(__DIR__ . '/../log');
$configurator->setTempDirectory(__DIR__ . '/../temp');
$configurator->createRobotLoader()
    ->addDirectory(__DIR__)
    ->register();
$configurator->addConfig(__DIR__ . '/config/config.neon');
$configurator->addConfig(__DIR__ . '/config/config.local.neon');
$container = $configurator->createContainer();
return $container;

ErrorPresenter.php

<?php

declare(strict_types = 1);

namespace App\Presenters;

use Nette;
use Nette\Application\Responses;
use Tracy\ILogger;


class ErrorPresenter implements Nette\Application\IPresenter
{
    /* @var ILogger */
    private $logger;


    public function __construct(ILogger $logger)
    {
        $this->logger = $logger;
    }

    /**
     * @param Nette\Application\Request $request
     * @return Nette\Application\IResponse
     */
    public function run(Nette\Application\Request $request): Nette\Application\IResponse
    {
        $e = $request->getParameter('exception');
        if ($e instanceof Nette\Application\BadRequestException) {
            // $this->logger->log("HTTP code {$e->getCode()}: {$e->getMessage()} in {$e->getFile()}:{$e->getLine()}", 'access');
            list($module, , $sep) = Nette\Application\Helpers::splitName($request->getPresenterName());
            return new Responses\ForwardResponse($request->setPresenterName($module . $sep . 'Error4xx'));
        }
        $this->logger->log($e, ILogger::EXCEPTION);
        return new Responses\CallbackResponse(function () {
            require _DIR_ . '/templates/Error/500.phtml';
        });
    }
}

template mám klasicky ve složce templates/Error/…

Editoval AdamVyborny (31. 1. 2017 12:44)

David Matějka
Moderator | 6445
+
+1
-

tohle se obvykle deje, kdyz dojde k chybe pri zpracovani tveho error presenteru, koukni se do logu, jestli tam neni nejaka chyba.

matopeto
Člen | 395
+
0
-

nepada to na tom ze tam nemas logger? z toho kodu mas inject cez konstruktor zakomentovany… Ale neviem ci je to nie je len chyba v snippete vo fore :)

iguana007
Člen | 970
+
0
-

From:

/* @var ILogger /
    private $logger;

To:

/* @var ILogger */
    private $logger;
AdamVyborny
Člen | 36
+
0
-

iguana007 napsal(a):

From:

/* @var ILogger /
    private $logger;

To:

/* @var ILogger */
    private $logger;

To je chyba snippetu nebo copy/paste. Zakomentovaný to nemám

matopeto
Člen | 395
+
0
-

Tak jedine ako pisal @DavidMatějka pozried do logov.

AdamVyborny
Člen | 36
+
0
-

Vyřešeno přidáním řádku do bootstrap.php

\Tracy\Debugger::$errorTemplate = __DIR__.'/presenters/templates/Error/500.phtml';