handle 메소드는 주로 미들웨어에서 사용되며,
HTTP 요청을 처리하고 그에 대한 응답을 반환한다.
미들웨어는 주어진 요청을 처리하기 위해 handle 메소드를 구현한다.
다음은 handle 메소드의 일반적인 패턴이다.
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Closure;
class ExampleMiddleware
{
public function handle(Request $request, Closure $next): Response
{
// 요청 전처리, 처리할 로직
// 다음 미들웨어 호출 또는 라우트 핸들러 호출
$response = $next($request);
// 응답 후처리, 처리 후 로직
return $response;
}
}
위 코드에서
handle(Request $request, Closure $next): Response
는 미들웨어의 핵심 메소드 시그니처이다.
여기서 핵심 메소드 시그니처란 메소드의 선언에서 메소드 이름, 매개변수의 유형 및 반환 유형 등 기본적인 구조를 의미한다.
메소드가 어떻게 호출되어야 하는지와 메소드가 어떤 종류의 값을 반환하는지를 명시하는 것이다.
핵심 메소드 시그니처는 다음과 같은 구조를 가진다.
methodName(parameter1Type $parameter1, parameter2Type $parameter2, ...): returnType
미들웨어의 핵심 메소드 시그니처와 비교해 보자.
- 'handle'은 메소드의 이름이다.
- 'Request'와 'Closure'는 각 매개변수의 유형을 나타낸다.
- 'Response'는 메소드가 반환하는 값의 유형이다.
handle 메소드는 주어진 HTTP 요청(Request)을 처리하고 해당 요청에 대한 응답(Response)을 반환해야 한다.
각 매개변수의 역할을 살펴보자.
$request
현재 요청을 나타낸다.
이 객체에는 현재 요청과 관련된 모든 정보가 포함되어 있다.
이 객체를 통해 요청의 헤더, 쿼리 매개변수, 라우팅 정보 등에 접근할 수 있다.
$next
클로저 혹은 다음 미들웨어를 나타내는 Closure 객체이다.
미들웨어는 요청을 처리한 후 다음 미들웨어로 제어를 전달해야 한다.
이때 $next 클로저를 호출하여 다음 단계로 요청을 전달할 수 있다.
응답 반환(': Response')
이 메소드의 반환 유형을 나타낸다.
즉 이 메소드는 Symfony\Component\HttpFoundation\Response 객체를 반환해야 한다.
이 객체에는 HTTP 응답과 관련된 모든 정보가 포함되어 있으며, 클라이언트에게 반환된다.
handle 메소드는 다음과 같은 순서로 작동한다.
1. 주어진 요청을 처리하기 위해 필요한 로직을 수행한다.
2. $next' 클로저를 호출하여 다음 단계로 요청을 전달한다.
3. 다음 단계에서 반환된 응답을 받아와 후속 작업을 수행한다.
4. 최정적으로 처리된 응답을 반환한다.