Hyperf中模拟打断方便在浏览器中进行调试

刚接触Hyperf没有多久,就感觉一直和以往FPM的方式不大习惯。老想着打断就die或者exit,引起资源未释放、连接未关闭等问题,并且框架本身也会直接报错。于是想到可以使用 Hyperf 框架提供的 throw new Exception() 抛出一个异常使程序中断模拟以前的 dd() 操作;

1.首先实现一个助手函数,并且注册

需要注意的是,该函数是一个辅助函数,建议在调试时使用,正式环境中应该避免使用。在使用该函数时,应该注意调试信息可能包含敏感数据,需要谨慎处理。

1.在根目录下创建一个 debug_helper.php 文件 文件内容如下
<?php

if (! function_exists('dd')) {
    /**
     * 该方法主要是使用异常处理对数据进行打断调试 2023-3-14
     *
     * @param  mixed  $data
     * @return void
     */
    function dd($data)
    {
        if(is_array($data)){
            $data = json_encode($data,256);
        }
        throw new \App\Exception\FmtException((string)$data);
    }
}
2.在如下代码中我们可以看到该函数可以接收一个参数 $data 为任意类型,Exception类在强类型下第一个参数必须传递为 string 所以这里如果我传入的是一个数组会自动转成JSON 像 resource 等类型需要自行拓展。
3.以上代码中的FmtException是我自己封装的一个异常处理类,当我在 App\Exception\Handler\AppExceptionHandler 中检测到当前异常属于 FmtException时候 我会做如下处理以方便非JSON数据的输出。
        if($throwable instanceof  FmtException){
            // 如果转JSON成功则输出json 如果为null输出本身
            $data = json_decode($throwable->getMessage(),true);
            if(!$data){
                $data = $throwable->getMessage();
            }
            return $this->response->fmt($data);
        }

4.这里调用了 response 代码如下;本质就是返回了一个json数据


	public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
        $this->response = $container->get(ResponseInterface::class);
    }
    
    public function fmt(mixed $message){
        return $this->response->json($message);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值