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
43 lines
998 B
PHP
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;
|
|
}
|
|
}
|