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
40 lines
889 B
PHP
40 lines
889 B
PHP
<?php
|
|
|
|
namespace MediaWiki\Rest;
|
|
|
|
/**
|
|
* This is an exception class that extends HttpException and will
|
|
* generate a redirect when handled. It is used when a redirect is
|
|
* treated as an exception output in your API, and you want to be able
|
|
* to throw it from wherever you are and immediately halt request
|
|
* processing.
|
|
*
|
|
* @newable
|
|
* @since 1.36
|
|
*/
|
|
class RedirectException extends HttpException {
|
|
|
|
/**
|
|
* The redirect target (an absolute URL)
|
|
* @var string
|
|
*/
|
|
private $target;
|
|
|
|
/**
|
|
* @stable to call
|
|
*
|
|
* @param int $code The HTTP status code (3xx) for this redirect
|
|
* @param string $target The redirect target (an absolute URL)
|
|
*/
|
|
public function __construct( int $code, string $target ) {
|
|
parent::__construct( 'Redirect', $code );
|
|
$this->target = $target;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getTarget(): string {
|
|
return $this->target;
|
|
}
|
|
}
|