2014-06-16 2 views
5

나는 이제까지 내 첫 RESTful API를 만들고 Slim을 내 프레임 워크로 사용했습니다. 그것은 지금까지 잘 작동합니다.슬림에 물음표로 선택적 매개 변수를 작성하는 방법은 무엇입니까?

이제는 훌륭한 API 디자인 가이드를 보았습니다. API를 빌드하는 가장 좋은 방법은 레벨을 평평하게 유지하는 것입니다.

my-domain.int/groups/search?q=my_query 

해당/그룹의 일부가 이미 POST가, PUT DELETE 또한 검색 쿼리는 다음과 같이 작동 GET와 함께 작동 :

나는 그렇게이 같은 URI를 구축하는 방법을 알아낼하려고 시도하는

$app->get('/groups/search/:query', 'findByName'); 

난 그냥 슬림에 물음표 선택적 매개 변수를 구축하는 방법을 알아낼 수 없습니다 :

my-domain.int/groups/search/my_query 

이 내가 PHP에서 라우팅에 사용하는 코드입니다. Google에서 아무 것도 찾을 수 없었습니다.

편집 : 검색이 나의 시나리오에 적합한 것 같다 때문에 내가 실현하고 싶은 또 다른 방법을 보여하려고 :

하는의 내가 API에서 부분적인 응답을하기를 원하는 경우를 생각 해보자. 요청은 같아야합니다 : 그런

my-domain.int/groups?fields=name,description 

하지 :

my-domain.int/groups/fields/name/description 

가 어떻게 라우팅에 실현합니까?

+0

가능한 복제본 : [http://stackoverflow.com/questions/8125064/slim-php-and-get-parameters](http://stackoverflow.com/questions/8125064/slim-php-and-get- 매개 변수) – TPete

답변

5

쿼리 문자열과 함께 제공된 매개 변수 인 GET 매개 변수를 route 매개 변수에 지정할 필요가 없습니다.프레임 워크는 이러한 값없이 URI를 일치 시키려고합니다. 는 GET 매개 변수에 액세스하려면 자동 전역 $_GET를 사용하는 표준 php에 접근, 사용할 수 있습니다

$app->get('/groups/test/', function() use ($app) { 
    if (isset($_GET['fields']){ 
     $test = $_GET('fields'); 
     echo "This is a GET route with $test"; 
    } 
}); 

또는 @Raphael는 그의 대답에 언급 된대로, 프레임 워크의 방법을 사용할 수 있습니다

$app->get('/groups/test/', function() use ($app) { 
    $test = $app->request()->get('fields'); 
    echo "This is a GET route with $test"; 
}); 
+0

그건 의미가 있습니다. 설명 주셔서 감사합니다! – Raphael

0

검색 문자열에 URL 구분 기호 (예 : /)가 포함될 수 있으므로 검색어가 URL 매개 변수로 적합하지 않습니다. 쿼리 매개 변수로 유지하는 데는 아무런 문제가 없습니다.이 개념을 모든 곳으로 푸시 할 필요가 없습니다.

귀하의 질문에 대답 할 수 있지만

는 선택적 매개 변수는 다른 URL로 해결된다 :

$app->get('/groups/search/:query', 'findByName'); 
$app->get('/groups/search/strict/:query', 'findByNameStrict'); 

편집 : 당신이 슬림의 와일드 카드 경로를 사용하려는 것 같다. 당신은 단지 경로의 단 한 번의 interpratation 있는지 확인해야합니다.

$app->get('/groups/fields/:fields+', 'getGroupsFiltered'); 

매개 변수 $fields은 배열입니다.

+0

고마워,하지만 그건 내 문제를 해결하지 않습니다. 검색이 시나리오로 적합하지 않을 수도 있다고 생각했습니다. 위에서 언급 한 것처럼 물음표가있는 URI를 작성하는 방법은 무엇입니까? 당신이 제안한 것은 이미 가지고있는 것입니다. – Raphael

3

이 좋아 당신이

home.int/groups/test?fields=name,description 

같은 URI 스타일을 구축하려면 당신이

$app->get('/groups/test/', function() use ($app) { 
    $test = $app->request()->get('fields'); 
    echo "This is a GET route with $test"; 
}); 
같은 완패를 구축 할 필요가 http://help.slimframework.com/discussions/problems/844-instead

에 필요하지 그 예를 발견

에코 : 이것은 이름, 설명이 포함 된 길입니다.

배열이 아니더라도 적어도 물음표를 사용할 수 있습니다. 와일드 카드 사용시/

1

선택적 경로 매개 변수가있을 수도 있습니다. 이는 블로그 아카이브에 하나의 경로를 사용하는 데 이상적입니다. 옵션 경로 매개 변수를 선언하려면, 다음과 같이 경로 패턴을 지정합니다

<?php 
 
$app = new Slim(); 
 
$app->get('/archive(/:year(/:month(/:day)))', function ($year = 2010, $month = 12, $day = 05) { 
 
    echo sprintf('%s-%s-%s', $year, $month, $day); 
 
});

이후의 각 경로 세그먼트는 선택 사항입니다. 이 경로는 다음에 대한 HTTP 요청을 허용합니다 :

/archive 
/archive/2010 
/archive/2010/12 
/archive/2010/12/05 

선택적인 경로 세그먼트가 HTTP 요청에서 생략되면 콜백 서명의 기본값이 대신 사용됩니다.

관련 문제