<?php
namespace App\Controller;
use App\Util\AppLogger;
use Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface;
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
use Symfony\Component\HttpKernel\Controller\ErrorController;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Debug\FileLinkFormatter;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpKernel\Profiler\Profiler;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\Response;
use Throwable;
use Symfony\Bridge\Twig\ErrorRenderer\TwigErrorRenderer;
use Twig\Environment;
class QExceptionController extends ErrorController
{
private $logger;
private $renderer;
public function __construct(AppLogger $logger, HttpKernelInterface $kern, $debug, Environment $twig) //, AppLogger $logger)
{
$this->logger = $logger;
$renderer = new HtmlErrorRenderer($debug);
$this->renderer = new TwigErrorRenderer($twig, $renderer, $debug);
parent::__construct($kern, $this, $this->renderer);
}
public function showAction(Request $request, Throwable $exception, DebugLoggerInterface $logger = null)
{
if($exception instanceof NotFoundHttpException) {
if($exception->getStatusCode() == 403) {
$this->logger->log('Access denied exception (403)', null, ['message' => $exception->getMessage(), 'url' => $request->getUri()], 'critical');
}
elseif($exception->getStatusCode() == 404) {
$this->logger->log('Page not found exception (404)', null, ['message' => $exception->getMessage(), 'url' => $request->getUri()], 'critical');
}
else {
$this->logger->log('Not handled exception', null, ['message' => $exception->getMessage(), 'url' => $request->getUri(), 'status code' => $exception->getStatusCode()], 'critical');
}
}
else {
$this->logger->log('Not handled exception', null, ['message' => $exception->getMessage(), 'url' => $request->getUri()], 'critical');
}
$flatten = $this->renderer->render($exception);
return new Response($flatten->getAsString(), $flatten->getStatusCode(), $flatten->getHeaders());
}
}