Slim Framework의 라우터는 매우 강력합니다. URL의 특정 부분을 변수처럼 받아오는 동적 파라미터와, 공통된 URL 접두사나 미들웨어를 하나로 묶어주는 라우트 그룹화(Grouping) 기능을 통해 깔끔한 API 구조를 설계할 수 있습니다.
1. 동적 파라미터 (Dynamic Parameters)
중괄호 {변수명}를 사용하면 URL 경로의 일부를 파라미터로 받을 수 있습니다. 이 값은 라우트 콜백 함수의 세 번째 인자인 $args 배열로 전달됩니다.
index.php
<?php
// 단일 파라미터 예: /users/123 으로 접속 시
$app->get('/users/{id}', function ($request, $response, array $args) {
$userId = $args['id']; // "123"
$response->getBody()->write("User ID: " . $userId);
return $response;
});
// 다중 파라미터 예: /posts/2026/05
$app->get('/posts/{year}/{month}', function ($request, $response, $args) {
$year = $args['year'];
$month = $args['month'];
$response->getBody()->write("Archive: {$year}년 {$month}월");
return $response;
});
?>
2. 라우트 그룹화 (Route Grouping)
버전이 명시된 API나 특정 도메인(예: /api/v1/...)의 라우트들을 group() 메서드로 묶어서 관리할 수 있습니다. 이를 통해 코드 중복을 줄이고 특정 그룹에만 미들웨어를 쉽게 적용할 수 있습니다.
index.php
<?php
use Slim\Routing\RouteCollectorProxy;
$app->group('/api/v1', function (RouteCollectorProxy $group) {
// 실제 경로는: GET /api/v1/users
$group->get('/users', function ($request, $response, $args) {
$response->getBody()->write("유저 목록 반환");
return $response;
});
// 실제 경로는: GET /api/v1/users/{id}
$group->get('/users/{id}', function ($request, $response, $args) {
$userId = $args['id'];
$response->getBody()->write("특정 유저 정보 반환 (ID: $userId)");
return $response;
});
});
?>
GET localhost:8080/api/v1/users/4028
특정 유저 정보 반환 (ID: 4028)
💡 정규표현식 패턴 매칭
파라미터에 정규식을 추가하여 {id:[0-9]+} 처럼 숫자만 허용하도록 라우팅 단에서 엄격하게 제한할 수도 있습니다. 정규식에 맞지 않으면 자동으로 404 에러가 발생합니다.
라우팅 결과 확인
위의 결과 화면에서 /api/v1/users/4028 URL로 요청을 보냈을 때, 라우터가 그룹 접두사(/api/v1)와 동적 파라미터(4028)를 모두 정확히 인식하고 파싱하는 과정을 확인할 수 있습니다.