Laravel 8 Terminable 中间件
有时可能需要在 HTTP
响应之后做一些工作。 如果你在中间件上定义了一个 terminate
方法,并且你使用的是 FastCGI,那么 terminate
方法会在响应发送到浏览器之后自动调用:
<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
// 存储 session 数据
}
}
terminate
方法应该同时接收请求和响应。定义了这个中间件之后,别忘了将它添加到路由列表或者 app/Http/Kernel.php
文件的全局中间件中。
当你在中间件上调用 terminate
方法的时候,Laravel 将从 服务容器 中解析出一个新的中间件实例。如果在调用 handle
和 terminate
方法的同时使用相同的中间件实例, 请使用容器的 singleton
方法注册中间件, 通常这应该在 AppServiceProvider.php
文件中的 register
方法中完成:
use App\Http\Middleware\TerminableMiddleware;
/**
* 注册任意应用服务
*
* @return void
*/
public function register()
{
$this->app->singleton(TerminableMiddleware::class);
}