我可以把后置中间件放到前置中间件的前面吗?

TencentEncryptEncode中间件要加密所有response,其他前置中间件可能会抛出异常,异常类return response,如果把TencentEncryptEncode放到前面,其他前置中间件的response加密不了

Route::middleware([
 //加密(后置中间件)
 TencentEncryptEncode::class,
 //TencentSimulateRequest::class,
 //解密
 TencentEncryptDecode::class,
 //校验appkey
 CheckAppkey::class,
 //验证签名
 TencentSign::class,
])->group(function  ()  {
    //接口
})
//验证签名中间件 - 前置
class TencentSign
{
        public function handle(Request $request, Closure $next)
        {       
            $result = Sign::verify('/'.$request->path(), $request->except('ciphertext'));

            if ($result === false) {
                throw new SignException();
            }

            return $next($request);
        }
}
//异常类
class SignException extends Exception
{
    /**
     * 报告异常。
     *
     * @return bool|null
     */
    public function report()
    {

    }

    /**
     * 渲染异常为 HTTP 响应。
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function render($request)
    {
        return response([
            'status' => 1001,
            'message' => '签名错误',
        ]);
    }
}
让PHP再次伟大
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

我不明白 中间件不是 你放后面就是后置 放前面就是前置吗

1年前 评论
勇敢的心 (楼主) 1年前
Smilephp (作者) 1年前
勇敢的心 (楼主) 1年前
nfangxu

中间件的顺序只是洋葱的层的顺序 他可以是前置的也可以是后置的 通常会按职能划分来处理层的顺序 职能覆盖面越大的 他所在的层越靠外

1年前 评论

其他中间件会抛异常的或者返回的,需要统一的做一次拦截,再把数据加密返回。 就是加密的不止中间件,还有异常的抛出的数据也要做拦截加密。然后有直接返回的数据,那也做一个加密的类,返回的时候用这个响应类

1年前 评论
勇敢的心 (楼主) 1年前

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