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