
라우팅 (Routing)
Slim Framework의 라우터는 Fast Route 구성 요소 위에 구축되었으며, 매우 빠르고 안정적입니다. 이 구성 요소를 사용하여 모든 라우팅을 수행하는 동안 앱(app)의 코어는 완전히 분리되었으며 인터페이스는 다른 라우팅 라이브러리를 사용할 수 있는 기반을 마련했습니다.
라우트를 만드는 방법 (How to create routes)
Slim\App
인스턴스에서 프록시 메서드를 사용하여 응용 프로그램 경로(routes)를 정의할 수 있습니다. Slim Framework는 가장 널리 사용되는 HTTP 메서드를 제공합니다.
GET 라우트 (GET Route)
Slim 애플리케이션의 GET()
메서드로 GET
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴 (선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->get('/books/{id}', function ($request, $response, array $args) {
// Show book identified by $args['id']
});
POST 라우트 (POST Route)
Slim 응용 프로그램의 post()
메서드로 POST
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->post('/books', function ($request, $response, array $args) {
// Create new book
});
PUT 라우트 (PUT Route)
Slim 애플리케이션의 put()
메서드로 PUT
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->put('/books/{id}', function ($request, $response, array $args) {
// Update book identified by $args['id']
});
DELETE 라우트 (DELETE Route)
Slim 애플리케이션의 delete()
메소드로 DELETE
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->delete('/books/{id}', function ($request, $response, array $args) {
// Delete book identified by $args['id']
});
OPTIONS 라우트 (OPTIONS Route)
Slim 애플리케이션의 OPTIONS()
방법으로 OPTIONS
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->options('/books/{id}', function ($request, $response, array $args) {
// Return response headers
});
PATCH 라우트 (PATCH Route)
Slim 애플리케이션의 patch()
메소드로 PATCH
HTTP 요청만 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->patch('/books/{id}', function ($request, $response, array $args) {
// Apply changes to book identified by $args['id']
});
Any 라우트 (Any Route)
Slim 응용 프로그램의 any()
메서드를 사용하여 모든 HTTP 요청 메서드를 처리하는 라우트를 추가할 수 있습니다. 두 가지 인수를 수용합니다.
- 라우트 패턴(선택 사항으로 명명된 자리 표시자 포함)
- 라우트 콜백
$app->any('/books/[{id}]', function ($request, $response, array $args) {
// Apply changes to books or book identified by $args['id'] if specified.
// To check which method is used: $request->getMethod();
});
두 번째 파라미터는 콜백입니다. Closure 대신 ‘_invoke()’ 메서드를 구현하는 클래스를 지정할 수 있습니다. 그런 다음 다른 곳에서 매핑을 수행할 수 있습니다.
$app->any('/user', 'MyRestfulController');
사용자 지정 라우트 (Custom Route)
Slim 애플리케이션의 map()
메서드를 사용하여 여러 HTTP 요청 메서드를 처리하는 라우트를 추가할 수 있습니다. 다음의 세 가지 인수를 수용한다.
- HTTP 메소드 배열
- 경로 패턴(선택 사항으로 지정된 자리 표시자 포함)
- 경로 콜백
$app->map(['GET', 'POST'], '/books', function ($request, $response, array $args) {
// Create new book or list all books
});
라우트 콜백 (Route callbacks)
위에서 설명한 각 라우팅 메서드는 콜백 루틴을 최종 인수로 받아들입니다. 이 인수는 어떤 PHP도 호출할 수 있으며, 기본적으로 3개의 인수를 허용합니다.
Request(요청)
첫 번째 인수는 HTTP 요청(request)를 나타내는Psr\Http\Message\ServerRequestInterface
객체입니다.Response(응답)
두 번째 인수는 HTTP 응답(response)을 나타내는Psr\Http\Message\ResponseInterface
객체입니다.Arguments(인수)
세 번째 인수는 현재 경로의 명명된 자리 표시자에 대한 값을 포함하는 연관 배열입니다.
응답에 내용 쓰기 (Writing content to the response)
HTTP 응답(response)에 내용을 쓸 수 있는 두 가지 방법이 있습니다. 먼저 경로 콜백에서 echo()
콘텐츠를 간단히 사용할 수 있습니다. 이 내용은 현재 HTTP 응답 오브젝트에 추가됩니다. 둘째, Psr\Http\Message\ResponseInterface
객체를 반환할 수 있습니다.
클로저 바인딩 (Closure binding)
dependency container 및 Closure
인스턴스를 경로 콜백으로 사용하는 경우 Closure 상태는 container
인스턴스에 바인딩됩니다. 즉, $this
키워드를 통해 Closure의 DI 컨테이너 인스턴스 inside에 액세스할 수 있습니다.
$app->get('/hello/{name}', function ($request, $response, array $args) {
// Use app HTTP cookie service
$this->get('cookies')->set('name', [
'value' => $args['name'],
'expires' => '7 days'
]);
});
경고!
슬림은 정적(static)
클로저(closure)를 지지하지 않는다.
리디렉션 헬퍼 (Redirect helper)
Slim 애플리케이션의 redirect()
방법으로 GET
HTTP 요청을 다른 URL로 리디렉션하는 경로를 추가할 수 있습니다. 다음의 세 가지 인수를 수용합니다.
- ‘from’을 리디렉션할 라우트 패턴 (지정된 자리 표시자 옵션 포함)
- 문자열 또는 Psr\Http\Message\UriInterface일 수 있는 ‘to’로 리디렉션할 위치
- 사용할 HTTP 상태 코드( 선택 사항(optional), 설정되지 않은 경우 ‘302’)
$app->redirect('/books', '/library', 301);
resirect()
경로는 요청된 상태 코드와 두 번째 인수로 설정된 Location
헤더로 응답합니다.