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);
 | |
|     }
 | |
| }
 | 
