在返回响应之前调用laravel可终止中间件 namespace App\Http\Middleware; use Closure; class LogRequest { public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { sleep(10); } }

在返回响应之前调用laravel可终止中间件 namespace App\Http\Middleware; use Closure; class LogRequest { public function handle($request, Closure $next) { return $next($request); } public function terminate($request, $response) { sleep(10); } },laravel,middleware,Laravel,Middleware,我使用postman查询我的laravel API,并在postman收到结果之前调用中间件中的terminate方法: namespace App\Http\Middleware; use Closure; class LogRequest { public function handle($request, Closure $next) { return $next($request); } public function termin

我使用postman查询我的laravel API,并在postman收到结果之前调用中间件中的terminate方法:

namespace App\Http\Middleware;

use Closure;


class LogRequest
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request, $response)
    {
        sleep(10);
    }
}
路线

中间件
namespace App\Http\Middleware;

use Closure;


class LogRequest
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request, $response)
    {
        sleep(10);
    }
}

当我移除
睡眠(10)时,响应提前10秒到达
因此我确信服务器在实际返回响应之前会等待terminate完成。

您是否已将中间件添加到HTTP内核中的全局中间件列表中?@Maraboc否,因为我不希望它在所有路由上执行。但是我将它添加到了我正在测试的路由中,我认为这就是问题所在,因为在他们的文章中,他们说
一旦定义了一个可终止的中间件,就应该将它添加到HTTP内核中的全局中间件列表中。
即使在那里添加,它也不会应用于所有路由;)@我刚试过。现在它被执行了两次,当我将它从路由中删除(只保留全局)时,我再次遇到同样的问题(在发送响应之前执行),尝试用while循环替换sleep,看看是否是睡眠导致了问题,因为在文档中,它将在响应后被触发!!
namespace App\Http\Middleware;

use Closure;


class LogRequest
{
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request, $response)
    {
        sleep(10);
    }
}