2013-02-06 3 views
0

Slim Framework를 사용하여 편안한 API를 구축했습니다. 오류 조건의 경우 단순히 각 오류의 경우에 적절한 에러 코드로 응답하고 중단> $ APP-호출, 예를 들면 :Slim Framework 중단 오류 코드가 작동하지 않습니다.

$app->halt(403, "Unauthorized"); 

을하지만 -v 내 API를 웅크 리고 때 나는 파이어 폭스에서 헤더를 볼 때 HTTPFox 나는 항상 오류 코드 500을보고있다. 내가 빠진 것이 있습니까?

+0

나는 특정 http 상태를 반환하고 싶을 때'$ app-> response() -> status (403)'를 사용합니다. 차이점이 무엇인지 모르겠습니다. – Odi

+0

나는 그것을 시도 할 것입니다. 슬림 한 문서는 특히 정지를 사용하여 상태 코드를 제공 할 수 있다고 말합니다. 다시, 아마도 나는 뭔가를 이해하지 못하고있다. – Hutch

답변

0

경로 콜백 외부에서 halt() 메소드를 호출 할 수 없습니다. 다음과 같이 사용해야합니다.

$app->get('/method/', function() { 
    //logical controls 
    //do something 
    //or 
    $app->halt(); 
}); 
1

내 함수 내에서 $ app 변수를 인스턴스화하는 것을 잊어 버렸기 때문에 최근에 이와 동일한 문제가 발생했습니다.

$app = Slim::getInstance(); 
: 함수는 ($ 응용 프로그램)을 사용하는 사용자가 명시 적으로 진술하지 않는 경우

원하는 에러 코드를 확인하려면 (403 '무단') $의 앱 정지하기 전에 다음 줄을 추가 시도

0

halt()과 setStatus() 사이에 차이가 있습니다. 정지()

, 당신은 현재 스크립트의 실행을 중지하고 전송하도록 선택할 HTTP 상태 코드와 메시지에 따라 응답을 렌더링합니다. 대해 setStatus() 또는 $ this-> 응답 -> 상태()로

$app = \Slim\Slim::getInstance(); //if you don't have access to $app 
$statusCode = 403; 
$body = 'Unauthorized'; 
$app->halt($statusCode, $body); 
//App will stop immediately 

;이 코드를 사용하여 응용 프로그램에 어디서나 그것을 할 수 있습니다 전송중인 HTTP 상태 코드 만 변경되지만 앱은 정상적으로 계속 실행되며 중지되지 않습니다. Slim이 라우트 실행의 끝에서 클라이언트에 보낼 헤더 만 변경합니다.

$app = \Slim\Slim::getInstance(); //if you don't have access to $app 
$statusCode = 403; 
$app->response->setStatus(400); 
//App will continue normally