wiki.techinc.nl/includes/Rest/LocalizedHttpException.php
Gergő Tisza 1172de3646
Rest: Make LocalizedHttpException emit a stable error code
When a LocalizedHttpException is created with a DataMessageValue,
show the error code to clients (named 'errorKey' to avoid confusion
with the HTTP error code) so it's easier for them to gather
debugging data, have specific handling for certain errors etc.
For plain MessageValue, use the message key for lack of a better
option.

This is roughly identical to how error handling in the Action API
works.

Also tighten up HttpException's $errorData / getData() parameter
to be strictly an array - it doesn't make any sense to pass null
for data. Technically this is a B/C break but passing null is an
exceedingly unlikely usage pattern, and there is no instance of
it in codesearch.

Change-Id: I3626febed6a0402361a461d96942a863fa230ed0
2023-02-01 22:37:51 -08:00

43 lines
998 B
PHP

<?php
namespace MediaWiki\Rest;
use Wikimedia\Message\DataMessageValue;
use Wikimedia\Message\MessageValue;
/**
* @newable
*/
class LocalizedHttpException extends HttpException {
private MessageValue $messageValue;
private string $errorKey;
/**
* @stable to call
*
* @param MessageValue $messageValue
* @param int $code
* @param array $errorData
*/
public function __construct( MessageValue $messageValue, $code = 500, $errorData = [] ) {
if ( $messageValue instanceof DataMessageValue ) {
$errorKey = $messageValue->getCode();
$errorData += $messageValue->getData() ?? [];
} else {
$errorKey = $messageValue->getKey();
}
parent::__construct(
'Localized exception with key ' . $messageValue->getKey(), $code, $errorData
);
$this->messageValue = $messageValue;
$this->errorKey = $errorKey;
}
public function getMessageValue(): MessageValue {
return $this->messageValue;
}
public function getErrorKey(): string {
return $this->errorKey;
}
}