igsem/api-exceptions

以一致的方式处理Phalcon或其他PHP API中的异常。使用正确的响应代码返回一致的响应,并将错误和异常记录到生产环境中的文件中。

0.0.1 2017-04-23 14:21 UTC

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