6 use InvalidArgumentException;
18 private const CT_PLAIN =
'text/plain; charset=utf-8';
19 private const CT_HTML =
'text/html; charset=utf-8';
20 private const CT_JSON =
'application/json';
40 $json = json_encode( $value, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );
41 if ( $json ===
false ) {
63 public function createJson( $value, $contentType =
null ) {
66 $response->setHeader(
'Content-Type', $contentType );
82 $response->setStatus( 204 );
97 $response->setStatus( 301 );
113 $response->setStatus( 302 );
127 $response->setStatus( 307 );
141 $response->setStatus( 303 );
157 $response->setStatus( 304 );
169 if ( $errorCode < 400 || $errorCode >= 600 ) {
170 throw new InvalidArgumentException(
'error code must be 4xx or 5xx' );
173 'httpCode' => $errorCode,
177 $response->setStatus( $errorCode );
193 array $extraData = []
197 array_merge( $extraData, $this->
formatMessage( $messageValue ) )
209 $exception->getCode(),
210 $exception->getMessageValue(),
211 (array)$exception->getErrorData()
214 return $exception->getResponse();
217 $response->setStatus( $exception->getCode() );
219 if ( in_array( $exception->getCode(), [ 204, 304 ],
true ) ) {
220 $response = $this->
create();
221 $response->setStatus( $exception->getCode() );
224 $exception->getCode(),
226 [
'message' => $exception->getMessage() ],
227 (array)$exception->getErrorData()
233 'message' =>
'Error: exception of type ' . get_class( $exception ),
250 $originalValue = $value;
251 if ( is_scalar( $value ) ) {
252 $data = [
'value' => $value ];
253 } elseif ( is_array( $value ) || $value instanceof stdClass ) {
256 $type = gettype( $originalValue );
257 if (
$type ===
'object' ) {
258 $type = get_class( $originalValue );
260 throw new InvalidArgumentException( __METHOD__ .
": Invalid return value type $type" );
273 $response->setHeader(
'Content-Type', self::CT_HTML );
274 $response->setHeader(
'Location', $target );
285 $url = htmlspecialchars( $url );
286 return "<!doctype html><title>Redirect</title><a href=\"$url\">$url</a>";
290 if ( !$this->textFormatters ) {
295 foreach ( $this->textFormatters as $formatter ) {
297 $messageText = $formatter->format( $messageValue );
298 $translations[
$lang] = $messageText;
300 return [
'messageTranslations' => $translations ];