# Класс HttpSoft\ErrorHandler\ErrorResponseGenerator

Класс, реализующий HttpSoft\ErrorHandler\ErrorResponseGeneratorInterface.

Исходный код на GitHub.

Код состояния ответа по умолчанию 500. Если код ошибки валидный (>= 400 && < 600) и является значением одной из констант в HttpSoft\Response\ResponseStatusCodeInterface, то код состояния ответа будет изменен на код ошибки.

use HttpSoft\ErrorHandler\ErrorResponseGenerator;

/**
 * @var Psr\Http\Message\ServerRequestInterface $request
 */

$responseGenerator = new ErrorResponseGenerator();

$response = $responseGenerator->generate(new \Exception(), $request);
$response->getStatusCode(); // 500
$response->getReasonPhrase(); // 'Internal Server Error'

$response = $responseGenerator->generate(new \Exception('', 301), $request);
$response->getStatusCode(); // 500
$response->getReasonPhrase(); // 'Internal Server Error'

$response = $responseGenerator->generate(new \Exception('', 404), $request);
$response->getStatusCode(); // 404
$response->getReasonPhrase(); // 'Not Found'

$response = $responseGenerator->generate(new \Exception('', 502), $request);
$response->getStatusCode(); // 502
$response->getReasonPhrase(); // 'Bad Gateway'

При генерации ответа попытается определить тип возвращаемого контента по заголовку запроса Accept.

use HttpSoft\ErrorHandler\ErrorResponseGenerator;

/**
 * @var Throwable $e
 * @var Psr\Http\Message\ServerRequestInterface $request
 */

$responseGenerator = new ErrorResponseGenerator();

// Вернуть экземпляр `HttpSoft\Response\TextResponse`
$responseGenerator->generate($e, $request->withHeader('accept', 'text/plain'));
$responseGenerator->generate($e, $request->withHeader('accept', 'application/json;q=0.99, text/plain'));
$responseGenerator->generate($e, $request->withHeader('accept', 'text/plain, text/html, application/json'));

// Вернуть экземпляр `HttpSoft\Response\JsonResponse`
$responseGenerator->generate($e, $request->withHeader('accept', 'application/json'));
$responseGenerator->generate($e, $request->withHeader('accept', 'text/plain;q=0.99, application/json'));
$responseGenerator->generate($e, $request->withHeader('accept', 'application/json, text/plain, text/html'));

// Вернуть экземпляр `HttpSoft\Response\XmlResponse`
$responseGenerator->generate($e, $request->withHeader('accept', 'text/xml'));
$responseGenerator->generate($e, $request->withHeader('accept', 'application/xml'));
$responseGenerator->generate($e, $request->withHeader('accept', 'text/plain;q=0.99, application/xml'));
$responseGenerator->generate($e, $request->withHeader('accept', 'application/xml, text/plain, text/html'));

// Вернуть экземпляр `HttpSoft\Response\HtmlResponse`
$responseGenerator->generate($e, $request); // без заголовка Accept
$responseGenerator->generate($e, $request->withHeader('accept', '*/*'));
$responseGenerator->generate($e, $request->withHeader('accept', 'text/html'));
$responseGenerator->generate($e, $request->withHeader('accept', 'application/json;q=0.99, text/html'));
$responseGenerator->generate($e, $request->withHeader('accept', 'text/html, text/plain, application/json'));

# Публичные методы

Оригинальное подробное описание методов смотрите в HttpSoft\ErrorHandler\ErrorResponseGeneratorInterface.

# generate

Генерирует экземпляр Psr\Http\Message\ResponseInterface с информацией об обработанной ошибке.

public function generate(Throwable $error, ServerRequestInterface $request): ResponseInterface;

HttpSoft\Response реализует Psr\Http\Message\ResponseInterface.