中间件捕获接口异常后如何再原封不动的返回

问题

新建了一个中间件,接口路由加入了此中间件,该中间件的应用是 将接口抛出的异常错误记录在日志中后,再把response 返回去,但是,捕获到异常后的response已经 变成未定义了,该如何解决呢?

public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        return $response;
    }
    return $response;
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        throw $e;
    }

}
4年前 评论
caiyaonan (楼主) 4年前
54skyer 4年前
讨论数量: 2
public function handle(ServerRequestInterface $request, DelegateInterface $next)
{
    try{
        $response = $next->process($request);
        $log["response"] = $response->getContents();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
    } catch (\Exception $e) {
        $log["response"] = $e->getMessage();
        $this->writeLog(json_encode($log, JSON_UNESCAPED_UNICODE));
        throw $e;
    }

}
4年前 评论
caiyaonan (楼主) 4年前
54skyer 4年前

看文档要仔细

return $next($response);
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!