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
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
tohle se obvykle deje, kdyz dojde k chybe pri zpracovani tveho error presenteru, koukni se do logu, jestli tam neni nejaka chyba.
- AdamVyborny
- Člen | 36
iguana007 napsal(a):
From:
/* @var ILogger / private $logger;
To:
/* @var ILogger */ private $logger;
To je chyba snippetu nebo copy/paste. Zakomentovaný to nemám
- AdamVyborny
- Člen | 36
Vyřešeno přidáním řádku do bootstrap.php
\Tracy\Debugger::$errorTemplate = __DIR__.'/presenters/templates/Error/500.phtml';