63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
/*
 | 
						|
 * This file is part of the Symfony package.
 | 
						|
 *
 | 
						|
 * (c) Fabien Potencier <fabien@symfony.com>
 | 
						|
 *
 | 
						|
 * For the full copyright and license information, please view the LICENSE
 | 
						|
 * file that was distributed with this source code.
 | 
						|
 */
 | 
						|
 | 
						|
namespace Symfony\Component\HttpKernel\Controller;
 | 
						|
 | 
						|
use Symfony\Component\ErrorHandler\ErrorRenderer\ErrorRendererInterface;
 | 
						|
use Symfony\Component\HttpFoundation\Request;
 | 
						|
use Symfony\Component\HttpFoundation\Response;
 | 
						|
use Symfony\Component\HttpKernel\Exception\HttpException;
 | 
						|
use Symfony\Component\HttpKernel\HttpKernelInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * Renders error or exception pages from a given FlattenException.
 | 
						|
 *
 | 
						|
 * @author Yonel Ceruto <yonelceruto@gmail.com>
 | 
						|
 * @author Matthias Pigulla <mp@webfactory.de>
 | 
						|
 */
 | 
						|
class ErrorController
 | 
						|
{
 | 
						|
    private HttpKernelInterface $kernel;
 | 
						|
    private string|object|array|null $controller;
 | 
						|
    private ErrorRendererInterface $errorRenderer;
 | 
						|
 | 
						|
    public function __construct(HttpKernelInterface $kernel, string|object|array|null $controller, ErrorRendererInterface $errorRenderer)
 | 
						|
    {
 | 
						|
        $this->kernel = $kernel;
 | 
						|
        $this->controller = $controller;
 | 
						|
        $this->errorRenderer = $errorRenderer;
 | 
						|
    }
 | 
						|
 | 
						|
    public function __invoke(\Throwable $exception): Response
 | 
						|
    {
 | 
						|
        $exception = $this->errorRenderer->render($exception);
 | 
						|
 | 
						|
        return new Response($exception->getAsString(), $exception->getStatusCode(), $exception->getHeaders());
 | 
						|
    }
 | 
						|
 | 
						|
    public function preview(Request $request, int $code): Response
 | 
						|
    {
 | 
						|
        /*
 | 
						|
         * This Request mimics the parameters set by
 | 
						|
         * \Symfony\Component\HttpKernel\EventListener\ErrorListener::duplicateRequest, with
 | 
						|
         * the additional "showException" flag.
 | 
						|
         */
 | 
						|
        $subRequest = $request->duplicate(null, null, [
 | 
						|
            '_controller' => $this->controller,
 | 
						|
            'exception' => new HttpException($code, 'This is a sample exception.'),
 | 
						|
            'logger' => null,
 | 
						|
            'showException' => false,
 | 
						|
        ]);
 | 
						|
 | 
						|
        return $this->kernel->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
 | 
						|
    }
 | 
						|
}
 |