PHPackages                             yuanyuanli/exception-handler - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. yuanyuanli/exception-handler

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

yuanyuanli/exception-handler
============================

webman exception handler plugin

v1.2.1(4mo ago)0959—0%MITPHPPHP &gt;=7.4

Since Sep 30Pushed 4mo agoCompare

[ Source](https://github.com/zhangerheo/exception-handler)[ Packagist](https://packagist.org/packages/yuanyuanli/exception-handler)[ RSS](/packages/yuanyuanli-exception-handler/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (8)Versions (3)Used By (0)

webman exception handler 异常插件
=============================

[](#webman-exception-handler-异常插件)

[![Latest Stable Version](https://camo.githubusercontent.com/381fb86ede3a4b973e44ca00c6dfb41c598951622639f11736975ffa580c9ed8/687474703a2f2f706f7365722e707567782e6f72672f74696e7977616e2f657863657074696f6e2d68616e646c65722f76)](https://packagist.org/packages/tinywan/exception-handler)[![Total Downloads](https://camo.githubusercontent.com/63582e936ffbb7581bf7fbd551c75779b1265efc5fa033f737e497b344c0ae04/687474703a2f2f706f7365722e707567782e6f72672f74696e7977616e2f657863657074696f6e2d68616e646c65722f646f776e6c6f616473)](https://packagist.org/packages/tinywan/exception-handler)[![Daily Downloads](https://camo.githubusercontent.com/4c9a6705416e2dcde73e1503517d6f7b3d12f064922535641956bb2b9a88ed52/687474703a2f2f706f7365722e707567782e6f72672f74696e7977616e2f657863657074696f6e2d68616e646c65722f642f6461696c79)](https://packagist.org/packages/tinywan/exception-handler)[![License](https://camo.githubusercontent.com/be7e326a1eb56f7cbe4fd09fbc59a2705609819bba40b8ec95c9bf4c3257e4f4/687474703a2f2f706f7365722e707567782e6f72672f74696e7977616e2f657863657074696f6e2d68616e646c65722f6c6963656e7365)](https://packagist.org/packages/tinywan/exception-handler)[![PHP Version Require](https://camo.githubusercontent.com/a67d42d5921a9ab84b5ea599243d8c7736cc1c6d58c03f5e5fb011d3e29e8f0c/687474703a2f2f706f7365722e707567782e6f72672f74696e7977616e2f657863657074696f6e2d68616e646c65722f726571756972652f706870)](https://packagist.org/packages/tinywan/exception-handler)![exception-handler](https://camo.githubusercontent.com/fb9a4f19324818f74d1b5ce2157b914c0311e5ac6c3af98c4828ac7f82f251c2/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6173742d636f6d6d69742f74696e7977616e2f657863657074696f6e2d68616e646c65722f6d61696e)![exception-handler](https://camo.githubusercontent.com/be627d16ba0056817322d70b6ecfbf4fc30ffd0dad8c437df8e7c46f3f6fe1c8/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f74696e7977616e2f657863657074696f6e2d68616e646c65723f636f6c6f723d666636396234)

安装
--

[](#安装)

```
composer require tinywan/exception-handler
```

配置
--

[](#配置)

`config/exception.php`

```
return [
    // 这里配置异常处理类
    '' => \Tinywan\ExceptionHandler\Handler::class,
];
```

> 多应用模式时，你可以为每个应用单独配置异常处理类，参见[多应用](https://www.workerman.net/doc/webman/multiapp.html)

基本用法
----

[](#基本用法)

请求参数错误

```
use support\Request;
use support\Response;
use Tinywan\ExceptionHandler\Exception\BadRequestHttpException;

class Token{
    public function issueToken(Request $request): Response
    {
        $params = $request->post();
        if (empty($params)) {
            throw new BadRequestHttpException('账号或密码不能为空');
        }
    }
}
```

以上异常抛出错误信息，如下格式：

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8

{
    "code": 0,
    "msg": "账号或密码不能为空",
    "data": {},
}
```

> 所有返回的异常信息将以json格式返回，以上为`返回简略的异常信息`

所有的异常错误处理器根据配置文件 `config/app.php`中`debug`的值来调整错误显示， 当`debug`值为`true` (表示在调试模式)， 错误处理器会显示异常以及详细的函数调用栈和源代码行数来帮助调试，将返回详细的异常信息。 当`debug`值为`false`，只有错误信息会被显示以防止应用的敏感信息泄漏，将返回简略的异常信息。

返回详细的异常信息

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=utf-8

{
    "code": 0,
    "msg": "password不允许为空",
    "data": {
        "request_url": "POST //127.0.0.1:8888/oauth/issue-token",
        "timestamp": "2022-03-06 15:19:12",
        "client_ip": "172.18.0.1",
        "request_param": {
            "username": "webman"
        },
        "error_message": "password不允许为空",
        "error_trace": "#0 /var/www/webman-admin/app/functions.php(68): Tinywan\\Validate\\Validate->check(Array)\n#1 /var/www/webman-admin/app/controller/Authentication.php(25): validate(Array, 'app\\\\common\\\\vali...')\n#2 /var/www/webman-admin/vendor/workerman/webman-framework/src/App.php(234): app\\controller\\Authentication->issueToken(Object(support\\Request))\n#3 /var/www/webman-admin/app/middleware/AccessControlMiddleware.php(26): Webman\\App::Webman\\{closure}(Object(support\\Request))\n#4 /var/www/webman-admin/vendor/workerman/webman-framework/src/App.php(228): app\\middleware\\AccessControlMiddleware->process(Object(support\\Request), Object(Closure))\n#5 /var/www/webman-admin/vendor/workerman/webman-framework/src/App.php(137): Webman\\App::Webman\\{closure}(Object(support\\Request))\n#6 /var/www/webman-admin/vendor/workerman/workerman/Connection/TcpConnection.php(638): Webman\\App->onMessage(Object(Workerman\\Connection\\TcpConnection), Object(support\\Request))\n#7 /var/www/webman-admin/vendor/workerman/workerman/Events/Select.php(295): Workerman\\Connection\\TcpConnection->baseRead(Resource id #254)\n#8 /var/www/webman-admin/vendor/workerman/workerman/Worker.php(2417): Workerman\\Events\\Select->loop()\n#9 /var/www/webman-admin/vendor/workerman/workerman/Worker.php(1541): Workerman\\Worker->run()\n#10 /var/www/webman-admin/vendor/workerman/workerman/Worker.php(1383): Workerman\\Worker::forkOneWorkerForLinux(Object(Workerman\\Worker))\n#11 /var/www/webman-admin/vendor/workerman/workerman/Worker.php(1357): Workerman\\Worker::forkWorkersForLinux()\n#12 /var/www/webman-admin/vendor/workerman/workerman/Worker.php(549): Workerman\\Worker::forkWorkers()\n#13 /var/www/webman-admin/start.php(87): Workerman\\Worker::runAll()\n#14 {main}"
    }
}
```

增加异常扩展响应数据

```
throw new BadRequestHttpException('验证码错误',[
    'data' => [
        'data1' => '自定义响应数据1',
        'data2' => '自定义响应数据2',
    ]
]);
```

> 将会在响应的 `data` 增加自义定的扩展响应参数

增加`data`的返回详细的异常信息

```
{
    "code": 0,
    "msg": "验证码错误",
    "data": {
        "request_url": "POST //127.0.0.1:8888/oauth/issue-token",
         ...
        "data1": "自定义响应数据1",
        "data2": "自定义响应数据2"
    }
}
```

如何自定义一个自己的异常类
-------------

[](#如何自定义一个自己的异常类)

### 编写异常类

[](#编写异常类)

假设自定义一个：`405 Method Not Allowed`（表示：请求行中指定的请求方法不能被用于请求相应的资源）

自定义异常类只需要继承`Tinywan\ExceptionHandler\Exception\BaseException`类即可

```
