easyswoole框架之异常处理

控制器异常处理

这是一个简单的easyswoole的简单控制器处理类

<?php
namespace App\HttpController\Learn;
use EasySwoole\Http\AbstractInterface\Controller;
class  Zq extends  Controller
{
    public function  index()
    {
           throw new \HttpException("controller exception");
    }
    //重写父类的exception处理方法
    public function  onException(\Throwable $throwable): void
    {
        var_dump("exception controller");

    }


}

如果我们访问index方法,看看easyswoole会返回什么给我们呢?一起来看一哈
在这里插入图片描述
确实调用了异常处理方法

注册全局注册处理异常方法

在APP目录下,我们建立一个exception目录
在这里插入图片描述

<?php
namespace App\Exception;

use EasySwoole\Http\Request;
use EasySwoole\Http\Response;

class ExceptionHandler
{
    public static function handle( \Throwable $exception, Request $request, Response $response )
    {
        var_dump($exception->getTraceAsString());
    }
}

然后我们在EasySwooleEvent.php中的init方法中注册这个异常处理类
在这里插入图片描述

  Di::getInstance()->set(SysConst::HTTP_EXCEPTION_HANDLER,[ExceptionHandler::class,'handle']);

在这里插入图片描述
我们自己定义一个ApiException异常处理类

<?php
namespace  App\Exception;

use Throwable;

class  ApiException extends \RuntimeException{


    public function __construct(array $apiErr, Throwable $previous = null)
    {
        $code=$apiErr[0];
        $message=$apiErr[1];
        parent::__construct($message, $code, $previous);
    }

}

然后我们在全局异常处理类接管方法编写异常处理方法

<?php
namespace App\Exception;

use EasySwoole\Http\Request;
use EasySwoole\Http\Response;

class ExceptionHandler
{
    public static function handle( \Throwable $exception, Request $request, Response $response ){

        $data=[];
        if($exception instanceof  ApiException){
            $code=$exception->getCode();
            $msg=$exception->getMessage();

        }else{
            $code=$exception->getCode();
          if(!isset($code)||$code<0){
                $code=-1;
            }

            $msg=empty($exception->getMessage())?"unknow":$exception->getMessage();
        }
        $data['code']=$code;
        $data['msg']=$msg;
        $result=json_encode($data,JSON_UNESCAPED_UNICODE);
        return $response->withHeader("Content-Type","application/json;charset=UTF-8")
                        ->withHeader("Access-Control-Allow-Origin","*")
                         ->write($result);
    }
}

我们注释掉之前Zq控制器的onexception方法测试哈效果

<?php
namespace App\HttpController\Learn;
use App\Exception\ApiException;
use EasySwoole\Http\AbstractInterface\Controller;
class  Zq extends  Controller
{
    public function  index()
    {
           throw new ApiException([1,"Controller Exception"]);

    }
    
}

测试效果
在这里插入图片描述
完全接管自定义异常

easyswoole是一个基于Swoole扩展的PHP框架,它提供了一种简单且高效的方式来构建WebSocket应用程序。WebSocket是一种在Web浏览器和服务器之间进行全双工通信的协议,它允许服务器主动向客户端推送数据,而不需要客户端发起请求。 使用easyswoole可以轻松地创建和管理WebSocket服务器,并处理来自客户端的连接、消息和事件。下面是一个简单的示例代码,演示了如何使用easyswoole创建一个WebSocket服务器: ```php <?php use EasySwoole\EasySwoole\ServerManager; use EasySwoole\EasySwoole\Swoole\EventRegister; use EasySwoole\EasySwoole\AbstractInterface\Event; use Swoole\WebSocket\Frame; use Swoole\WebSocket\Server; // 注册WebSocket事件回调 Event::getInstance()->set(EventRegister::onMessage, function (Server $server, Frame $frame) { // 处理收到的消息 $data = $frame->data; // TODO: 处理消息逻辑 // 向客户端发送消息 $server->push($frame->fd, 'Hello, client!'); }); // 创建WebSocket服务器 $server = ServerManager::getInstance()->getSwooleServer(); $server->on('WorkerStart', function () { echo "WebSocket server started\n"; }); // 启动服务器 EasySwoole\EasySwoole\Core::getInstance()->initialize(); ``` 上述代码中,我们首先注册了一个`onMessage`事件回调函数,用于处理收到的消息。在这个示例中,我们简单地向客户端发送了一条回复消息。然后,我们创建了一个WebSocket服务器,并在`WorkerStart`事件回调中输出了一条启动消息。最后,我们使用`EasySwoole\EasySwoole\Core::getInstance()->initialize()`启动了服务器。 请注意,上述代码只是一个简单的示例,实际应用中可能需要更复杂的逻辑来处理不同的消息和事件。你可以根据自己的需求进行扩展和定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值