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:
parent
8b71103836
commit
b00d02496e
@ -184,6 +184,8 @@ class helper
|
|||||||
* @param string $message The error message
|
* @param string $message The error message
|
||||||
* @param int $code The error code (e.g. 404, 500, 503, etc.)
|
* @param int $code The error code (e.g. 404, 500, 503, etc.)
|
||||||
* @return Response A Response instance
|
* @return Response A Response instance
|
||||||
|
*
|
||||||
|
* @deprecated 3.1.3 (To be removed: 3.3.0) Use exceptions instead.
|
||||||
*/
|
*/
|
||||||
public function error($message, $code = 500)
|
public function error($message, $code = 500)
|
||||||
{
|
{
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
namespace phpbb\event;
|
namespace phpbb\event;
|
||||||
|
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
|
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
|
||||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
class kernel_exception_subscriber implements EventSubscriberInterface
|
class kernel_exception_subscriber implements EventSubscriberInterface
|
||||||
@ -57,9 +57,16 @@ class kernel_exception_subscriber implements EventSubscriberInterface
|
|||||||
|
|
||||||
$exception = $event->getException();
|
$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(
|
$this->template->assign_vars(array(
|
||||||
'MESSAGE_TITLE' => $this->user->lang('INFORMATION'),
|
'MESSAGE_TITLE' => $this->user->lang('INFORMATION'),
|
||||||
'MESSAGE_TEXT' => $exception->getMessage(),
|
'MESSAGE_TEXT' => $message,
|
||||||
));
|
));
|
||||||
|
|
||||||
$this->template->set_filenames(array(
|
$this->template->set_filenames(array(
|
||||||
@ -68,8 +75,14 @@ class kernel_exception_subscriber implements EventSubscriberInterface
|
|||||||
|
|
||||||
page_footer(true, false, false);
|
page_footer(true, false, false);
|
||||||
|
|
||||||
$status_code = $exception instanceof HttpException ? $exception->getStatusCode() : 500;
|
$response = new Response($this->template->assign_display('body'), 500);
|
||||||
$response = new Response($this->template->assign_display('body'), $status_code);
|
|
||||||
|
if ($exception instanceof HttpExceptionInterface)
|
||||||
|
{
|
||||||
|
$response->setStatusCode($exception->getStatusCode());
|
||||||
|
$response->headers->add($exception->getHeaders());
|
||||||
|
}
|
||||||
|
|
||||||
$event->setResponse($response);
|
$event->setResponse($response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
52
phpBB/phpbb/exception/exception.php
Normal file
52
phpBB/phpbb/exception/exception.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
29
phpBB/phpbb/exception/exception_interface.php
Normal file
29
phpBB/phpbb/exception/exception_interface.php
Normal 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();
|
||||||
|
}
|
68
phpBB/phpbb/exception/http_exception.php
Normal file
68
phpBB/phpbb/exception/http_exception.php
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user