wiki.techinc.nl/includes/Rest/ResponseException.php
C. Scott Ananian 6f9de41b4c MediaWiki\Rest\HttpException: Support 3xx codes and wrapped Response
Allow a greater variety of status codes to be handled by
HttpException, including 204 and 304 ("no content" and "not modified")
as well as 301, 302, 303, 304, and 307 (redirects, via a new
RedirectException subclass).  This allows for a greater variety of
"exceptional conditions" to be handled by throwing, avoiding the need
for checking error codes all the way up a deeply nested call stack.

For cases which still aren't covered, we allow wrapping a full
Response object as an exception.  This allows the same basic exception
mechanism to be used, even if sometimes you need a custom status code
or custom headers.

See I800a3fe5160a9d7fc3fddbb445ec61cc5390b14f for a sample use case
from the Parsoid REST handler implementation.

Bug: T260959
Change-Id: I5a00ba8fbc90aa266a6d77f15e8e398be5463ff4
2020-09-11 14:52:54 -04:00

41 lines
1,009 B
PHP

<?php
namespace MediaWiki\Rest;
/**
* This is an exception class that wraps a Response and extends
* HttpException. It is used when a particular response type
* (whatever the HTTP status code) is treated as an exceptional output
* in your API, and you want to be able to throw it from wherever you
* are and immediately halt request processing. It can also be used
* to customize the standard 3xx or 4xx error Responses returned by
* the standard HttpException, for example to add custom headers.
*
* @newable
* @since 1.36
*/
class ResponseException extends HttpException {
/**
* The wrapped Response.
* @var Response
*/
private $response;
/**
* @stable to call
*
* @param Response $response The wrapped Response
*/
public function __construct( Response $response ) {
parent::__construct( 'Response', $response->getStatusCode() );
$this->response = $response;
}
/**
* @return Response
*/
public function getResponse(): Response {
return $this->response;
}
}