igsem / api-exceptions
以一致的方式处理Phalcon或其他PHP API中的异常。使用正确的响应代码返回一致的响应,并将错误和异常记录到生产环境中的文件中。
This package is not auto-updated.
Last update: 2024-09-14 20:04:20 UTC
README
与Phalcon、Lumen和其他支持php 7+的任何PHP应用一起使用
您的代码
throw new TokenException('Token did not pass verification')
您的响应
Status: 401 Unauthorized
{"message":"Invalid Tokenn","debug":{}}
自动捕获所有错误和异常,并返回友好的API消息。它提供了一组可在API中使用的异常,这些异常解析为标准的HTTP状态码和默认消息。
所有未实现 Igsem\ApiExceptions\Exceptions\ApiExceptionInterface 的异常将返回500状态码并将消息记录到自定义日志文件中。
您可以注册自己的异常,唯一的要求是实现 ApiExceptionInterface。
您可以自定义每条消息和代码,并在开发环境中发送额外的调试信息。
它的功能
- 返回API友好的响应
- 提供创建自定义响应的API
- 记录所有意外的错误和异常
- 如果发生意外的异常或错误,可以发送电子邮件
- 在开发中提供额外的调试信息
- 在生产环境中隐藏所有意外的错误和异常
- 处理API中可能发生的几乎所有非200响应
安装
在您的入口控制器中或当引导应用程序时,只需注册处理程序即可
use Igsem\ApiExceptions\ApiExceptions;
$apiExceptions = new ApiExceptions($logger, ApiExceptions::DEVELOPMENT, $mySwiftmailer);
$apiExceptions->register();
默认情况下,环境设置为生产,不需要邮件发送器。该库仅支持swiftmailer。
Logger有些棘手。因为每个人通常都有自己的Logger实现,而且大多数情况下它们都不兼容PSR 3,所以我们决定要求我们的自定义接口。您可以传递任何Logger,直到它实现
Igsem\ApiExceptions\LoggerInterface
我们默认提供Phalcon的Logger类。
这是我们的Logger创建示例
use Igsem\ApiExceptions\Loggers\PhalconLogger;
/**
* Initializes the logger
*/
protected function initLogger()
{
/** @var \Phalcon\Config $config */
$config = $this->diContainer->getShared('config');
$path = $config->get('logger')->toArray()['path'];
$this->diContainer->setShared('logger', new PhalconLogger($path));
}
它只需要日志文件夹的路径。只有三种方法可用
- logError
- logException
- logMessage
Logger将创建包含调试信息、适当格式和调试所需信息的单独文件。
您仍然可以使用自己的Logger,只需将其扩展为logError和logException即可,以便让库知道如何处理这些情况。
!如果您决定使用该库,请删除围绕应用程序的try catch块。该库注册了自己的错误和异常处理程序。
自定义异常示例
<?php
namespace Igsem\ApiExceptions\Exceptions;
/**
* Created by PhpStorm.
* User: juliuskoronci
* Date: 23/04/2017
* Time: 11:54
*/
class InvalidParametersException extends \Exception implements ApiExceptionInterface
{
/** @var array - used to pass additional info for dev env */
private $debug;
/**
* TokenException constructor.
* @param string $message
* @param int $code
* @param \Throwable|null $previous
* @param array $debug
*/
public function __construct(
$message = StatusCodes::INVALID_PARAMETERS_MESSAGE,
$code = StatusCodes::INVALID_PARAMETERS_CODE,
\Throwable $previous = null,
$debug = []
)
{
/**
* Set Default if null provided because of debug
*/
$message = $message??StatusCodes::INVALID_PARAMETERS_MESSAGE;
$code = $code??StatusCodes::INVALID_PARAMETERS_CODE;
parent::__construct($message, $code, $previous);
$this->debug = $debug;
}
/**
* @return array
*/
public function getDebug(): array
{
return $this->debug;
}
/**
* @param array $debug
*/
public function setDebug(array $debug = [])
{
$this->debug = $debug;
}
}
同样,您也可以创建自己的自定义异常。如果它们实现ApiExceptionInterface,则将被捕获,并返回正确的响应。
可用异常列表
- AccessDeniedException
- BadRequestException
- InvalidCredentialException
- InvalidParametersException
- NotFoundException
- TokenException
- UnAuthorizedException