Я только что закончил создание приложения API с тонким фреймворком, изначально в моем коде я использую контейнер зависимостей для обработки всех исключений, приведенных ниже.PHP: обработка исключений для Slim Framework
//Add container to handle all exceptions/errors, fail safe and return json
$container['errorHandler'] = function ($container) {
return function ($request, $response, $exception) use ($container) {
//Format of exception to return
$data = [
'message' => $exception->getMessage()
];
return $container->get('response')->withStatus(500)
->withHeader('Content-Type', 'application/json')
->write(json_encode($data));
};
};
Но вместо того, чтобы бросать 500 Server Error
все время я хотел бы добавить другой код HTTPS réponse. Интересно, могу ли я получить помощь в том, как это сделать.
public static function decodeToken($token)
{
$token = trim($token);
//Check to ensure token is not empty or invalid
if ($token === '' || $token === null || empty($token)) {
throw new JWTException('Invalid Token');
}
//Remove Bearer if present
$token = trim(str_replace('Bearer ', '', $token));
//Decode token
$token = JWT::decode($token, getenv('SECRET_KEY'), array('HS256'));
//Ensure JIT is present
if ($token->jit == null || $token->jit == "") {
throw new JWTException('Invalid Token');
}
//Ensure User Id is present
if ($token->data->uid == null || $token->data->uid == "") {
throw new JWTException("Invalid Token");
}
return $token;
}
Проблема еще больше от таких функций, как показано выше, так как тонкая структура решает обрабатывать все исключения неявно, у меня нет доступа использовать try catch
, чтобы поймать любые ошибки
Да, это работает, но проблема в том, что Я использую этот контейнер для захвата пользовательских исключений из разных методов, которые не имеют доступа к объекту $ response, поэтому я не может установить код состояния из тех функций, которые бросают исключения и slim framework, не позволяет мне фиксировать эти исключения. –
@JamesOkpeGeorge IMHO, вы должны создать новый объект класса 'Response', а затем передать его. –
@JamesOkpeGeorge Кроме того, для вашей новой проблемы создайте новый вопрос. –