<?php
namespace Rapsys\AirBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
#use Symfony\Component\Security\Core\Exception\AccessDeniedException;
#use Symfony\Component\Security\Http\Authorization\AccessDeniedHandlerInterface;
#use Symfony\Component\DependencyInjection\ContainerInterface;
#use Symfony\Component\Routing\RouterInterface;
#use Symfony\Component\Translation\TranslatorInterface;
#use Twig\Environment;
#use Symfony\Component\Debug\Exception\FlattenException;
use Symfony\Component\ErrorHandler\Exception\FlattenException;
class ErrorController extends DefaultController {
/**
* {@inheritdoc}
*/
public function show(Request $request, FlattenException $exception) {
//Set section
$section = $exception->getStatusCode().' '.$this->translator->trans($exception->getStatusText());
//Set title
$title = $this->translator->trans($this->config['site']['title']).' - '.$section;
//Set the message
$message = $exception->getMessage();
//Init trace
$trace = null;
//Prevent non admin access to trace
if ($this->isGranted('ROLE_ADMIN')) {
//Set project dir
$projectDir = $this->container->getParameter('kernel.project_dir').'/';
//Set the trace
//$trace = $exception->getAsString();
$trace = '';
//Iterate on array
foreach($exception->toArray() as $current) {
$trace .= $current['class'];
if (!empty($current['message'])) {
$trace .= ': '.$current['message'];
}
if (!empty($current['trace'])) {
foreach($current['trace'] as $id => $sub) {
$trace .= "\n".'#'.$id.' '.$sub['class'].$sub['type'].$sub['function'];
if (!empty($sub['args'])) {
$trace .= '('.implode(', ', array_map(function($v){return $v[0].' '.$v[1];}, $sub['args'])).')';
}
$trace .= ' in '.str_replace($projectDir, '', $sub['file']).':'.$sub['line'];
}
}
}
}
//Render template
return $this->render(
'@RapsysAir/error.html.twig',
['title' => $title, 'section' => $section, 'message' => $message, 'trace' => $trace]+$this->context
);
}
}