Laravel middleware
를 적용하던 중, Middleware
내부 로직에 따라서 각 Controller(Business Logic)
와 Middleware
에서 \Log::Debug
호출 순서가 다르다는걸 발견했습니다.
원래 middleware
는 요청 라우트의 비즈니스 로직(컨트롤러나 서비스) 들어가기 전에
무조건 먼저 전부다 실행
되는 줄 알았는데 말이죠.
public function handle(Request $request, Closure $next)
{
return $next($request);
}
처음 middleware
를 make
했을 때, 기본로직입니다.
하지만 아래처럼 로직을 바꾸게 되면, Controller 내부 비즈니스 로직 실행 후에
middleware 로직을 실행
할 수 있습니다.
public function handle(Request $request, Closure $next)
{
// return $next($request);
$response = $next($request);
return $response;
}
// ExampleMiddleware.php
\Log::Debug('Middleware init'); // 1
\Log::Debug('Middleware before allocate response'); // 2
$response = $next($request);
\Log::Debug('Middleware after allocate response'); // 4
return $response;
// ExampleController.php
public function login($request): array
{
\Log::Debug('in Controller'); //3
}
// ExampleMiddleware.php
\Log::Debug('Middleware init'); // 1
\Log::Debug('Middleware before allocate response'); // 2
\Log::Debug('Middleware after allocate response'); // 3
return $next($request);
// ExampleController.php
public function login($request): array
{
\Log::Debug('in Controller'); //4
}
매일 삽질만 하는 줄 알았는데, 개인적으로 신기한 걸 발견해서 기분이 좋았습니다.