在返回响应之前调用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); } }
我使用postman查询我的laravel API,并在postman收到结果之前调用中间件中的terminate方法:在返回响应之前调用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
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);
}
}