1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-02-25 04:23:38 +01:00

[ticket/13361] Improve the exception listener

PHPBB3-13361
This commit is contained in:
Tristan Darricau 2014-11-22 23:10:19 +01:00
parent 8b71103836
commit b00d02496e
5 changed files with 168 additions and 4 deletions

View File

@ -184,6 +184,8 @@ class helper
* @param string $message The error message
* @param int $code The error code (e.g. 404, 500, 503, etc.)
* @return Response A Response instance
*
* @deprecated 3.1.3 (To be removed: 3.3.0) Use exceptions instead.
*/
public function error($message, $code = 500)
{

View File

@ -14,9 +14,9 @@
namespace phpbb\event;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Symfony\Component\HttpFoundation\Response;
class kernel_exception_subscriber implements EventSubscriberInterface
@ -57,9 +57,16 @@ class kernel_exception_subscriber implements EventSubscriberInterface
$exception = $event->getException();
$message = $exception->getMessage();
if ($exception instanceof \phpbb\exception\exception_interface)
{
$message = call_user_func_array(array($this->user, 'lang'), array_merge(array($message), $exception->get_parameters()));
}
$this->template->assign_vars(array(
'MESSAGE_TITLE' => $this->user->lang('INFORMATION'),
'MESSAGE_TEXT' => $exception->getMessage(),
'MESSAGE_TEXT' => $message,
));
$this->template->set_filenames(array(
@ -68,8 +75,14 @@ class kernel_exception_subscriber implements EventSubscriberInterface
page_footer(true, false, false);
$status_code = $exception instanceof HttpException ? $exception->getStatusCode() : 500;
$response = new Response($this->template->assign_display('body'), $status_code);
$response = new Response($this->template->assign_display('body'), 500);
if ($exception instanceof HttpExceptionInterface)
{
$response->setStatusCode($exception->getStatusCode());
$response->headers->add($exception->getHeaders());
}
$event->setResponse($response);
}

View File

@ -0,0 +1,52 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\exception;
/**
* Class exception
*
* Define an exception which support a language var as message.
*/
class exception extends \RuntimeException implements exception_interface
{
/**
* Parameters to use with the language var.
*
* @var array
*/
private $parameters;
/**
* Constructor
*
* @param string $message The Exception message to throw (must be a language variable).
* @param array $parameters The parameters to use with the language var.
* @param \Exception $previous The previous exception used for the exception chaining.
* @param integer $code The Exception code.
*/
public function __construct($message = "", array $parameters = array(), \Exception $previous = null, $code = 0)
{
$this->parameters = $parameters;
parent::__construct($message, $code, $previous);
}
/**
* {@inheritdoc}
*/
public function get_parameters()
{
return $this->parameters;
}
}

View File

@ -0,0 +1,29 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\exception;
/**
* Interface exception_interface
*
* Define an exception which support a language var as message.
*/
interface exception_interface
{
/**
* Return the arguments associated with the message if it's a language var.
*
* @return array
*/
public function get_parameters();
}

View File

@ -0,0 +1,68 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\exception;
/**
* Class http_exception
*/
class http_exception extends exception implements exception_interface
{
/**
* Http status code.
*
* @var integer
*/
private $status_code;
/**
* Additional headers to set in the response.
*
* @var array
*/
private $headers;
/**
* Constructor
*
* @param integer $status_code The http status code.
* @param string $message The Exception message to throw (must be a language variable).
* @param array $parameters The parameters to use with the language var.
* @param \Exception $previous The previous exception used for the exception chaining.
* @param array $headers Additional headers to set in the response.
* @param integer $code The Exception code.
*/
public function __construct($status_code, $message = "", array $parameters = array(), \Exception $previous = null, array $headers = array(), $code = 0)
{
$this->status_code = $status_code;
$this->headers = $headers;
parent::__construct($message, $code, $previous);
}
/**
* {@inheritdoc}
*/
public function getStatusCode()
{
return $this->status_code;
}
/**
* {@inheritdoc}
*/
public function getHeaders()
{
return $this->headers;
}
}