Slim4におけるMiddlewareの実行順
2024/01/25
Middlewareとは、ルートに登録したコールバック関数の前後で任意の処理を実行させることができる機能です。使いどころとしてはCSRFトークンのチェック、認証・認可などが挙げられます。Middleware自体は多くのフレームワークで提供されている機能ですが、コールバック関数の前に実行させる書き方、後に実行させる書き方はフレームワークによって異なります。
Slim4のMiddlewareは[公式ドキュメント](https://www.slimframework.com/docs/v4/concepts/middleware.html#how-does-middleware-work)のイメージにある通り、同心円状に重なる層のようになっていて、後から登録したMiddlewareほど先に実行されます。
ルートに登録したコールバック関数の前に実行されるのか後に実行されるのかは、`RequestHandlerInterface::handle()`メソッドの前に処理を書くのか後に処理を書くのかによって決まります。
次のようにMiddlewareとルートを登録したとします。
```php
$app->add(function (Request $request, RequestHandlerInterface $handler) {
echo 'middleware1 : before<br>';
$response = $handler->handle($request);
echo 'middleware1 : after<br>';
return $response;
});
$app->add(function (Request $request, RequestHandlerInterface $handler) {
echo 'middleware2 : before<br>';
$response = $handler->handle($request);
echo 'middleware2 : after<br>';
return $response;
});
$app->get('/', function (Response $response) {
echo 'callback function<br>';
return $response;
});
```
トップページにアクセスすると、次のように表示されます。
```txt
middleware2 : before
middleware1 : before
callback function
middleware1 : after
middleware2 : after
```