Если вы должны вернуть PHP ошибки/исключения на стороне клиента, который не рекомендуется (но я знаю, что это легче для развития), вам понадобится пользовательский error/uncaught- exception обработчик для PHP. Таким образом, вы можете настроить способ отображения ошибок/исключений.
Вот пример кода, который выводит ошибки и исключает исключения как объекты JSON.
// Set error handler
set_error_handler('api_error_handler');
function api_error_handler($errno, $errstr) {
return api_error($errstr, $errno, 500);
}
// Set uncaught exceptions handler
set_exception_handler('api_exception_handler');
function api_exception_handler($exception) {
return api_error($exception->getMessage(), $exception->getCode(), 500);
}
// Error/Exception helper
function api_error($error, $errno, $code) {
// In production, you might want to suppress all these verbose errors
// and throw a generic `500 Internal Error` error for all kinds of
// errors and exceptions.
if ($environment == 'production') {
$errno = 500;
$error = 'Internal Server Error!';
}
http_response_code($code);
header('Content-Type: application/json');
return json_encode([
'success' => false,
'errno' => $errno,
'error' => $error,
]);
}
Но это еще не все; Поскольку пользовательские обработчики ошибок не могут обрабатывать фатальные ошибки, будут отображаться фатальные сообщения об ошибках. Вам необходимо отключить ошибки отображения с помощью вызова ini_set()
:
ini_set('display_errors', 0);
Так как обрабатывать фатальные ошибки? Неустранимые ошибки могут быть устранены при завершении работы с register_shutdown_function()
. В обработчике останова нам нужно получить последнюю информацию об ошибке с вызовом error_get_last()
. Итак:
// Set shutdown handler
register_shutdown_function('api_fatal_error_handler');
function api_fatal_error_handler() {
$error = error_get_last();
if ($error && error_reporting() && $error['type'] === E_ERROR) {
return api_error($error['message'], E_CORE_ERROR, 500);
}
}
Тогда на яваскрипте стороны вещей, вы должны добавить функцию обратного вызова ошибки и показать информацию об ошибке пользователя.
В конце концов, почему бы не использовать зрелый пакет обработчика ошибок/исключений вместо того, чтобы реализовать все эти? Встречайте Whoops.
Код в порядке, просто удобство просмотра ошибок php в разобранном json, чтобы увидеть какие-либо ошибки прямо внутри углового выражения. Хороший намек на утечку информации. – ItsmeJulian