laravel Controller - Middleware 동작 순서 정리

아이고마워·2022년 6월 30일
0

Laravel

목록 보기
3/5

Laravel middleware를 적용하던 중, Middleware내부 로직에 따라서 각 Controller(Business Logic)Middleware에서 \Log::Debug 호출 순서가 다르다는걸 발견했습니다.

원래 middleware요청 라우트의 비즈니스 로직(컨트롤러나 서비스) 들어가기 전에 무조건 먼저 전부다 실행되는 줄 알았는데 말이죠.

기본 미들웨어

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

처음 middlewaremake 했을 때, 기본로직입니다.

변형 미들웨어

하지만 아래처럼 로직을 바꾸게 되면, Controller 내부 비즈니스 로직 실행 후에 middleware 로직을 실행 할 수 있습니다.

public function handle(Request $request, Closure $next)
{
//	return $next($request);
    $response = $next($request);
    return $response;
}

1. $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
}

2. 그냥 바로 $request 반환.

// 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
}

매일 삽질만 하는 줄 알았는데, 개인적으로 신기한 걸 발견해서 기분이 좋았습니다.

0개의 댓글