2014-05-21 2 views
1

슬림 PHP에서 각 경로 앞에 루틴을 호출 할 수있는 방법이 있습니까? RESTful API가 있고 API 메소드를 호출하기 전에 로그인을 확인하려고합니다. 내 코드는 다음과 같습니다.Slim PHP : 모든 경로 앞에 루틴을 실행하십시오.

$app = new Slim(); 
$app->get('user/:id', function($id) use($app){ 
    $user = API::getUser($id); 
    if($user){ 
     $app->response->status(200); 
    }else{ 
     $app->response->status(404); 
    } 
}); 

API가 요청을 처리하고 JSON 응답을 처리합니다. 콜백과 같은 요청을 허용하기위한 전제 조건을 첨부하고 싶습니다. API는 true 또는 false을 반환하는 API::validate($token) 메서드를 가지고 있습니다.이 오류를 포착하고 인증에 실패하면 상태 코드 401을 반환하고 싶습니다. API::login()API::register()과 같은 일부 메소드는이 유효성 검사가 필요하지 않습니다.

+1

설명서에는 원하는 작업을 수행 할 수있는 '디스패치 후크'가 포함되어 있습니다. 링크 : [Hooks-Overview] (http://docs.slimframework.com/#Hooks-Overview). 'Slim-ContextSensitiveLoginLogout'(https://github.com/briannesbitt/Slim-ContextSensitiveLoginLogout) –

+0

감사합니다. Ryan, 제가 공부하겠습니다! : D – bodruk

+0

@ drrux이 질문을 끝내기 위해 내 대답이 도움이되는지 확인하십시오. –

답변

3

먼저 모든 설명서를 읽는 것이 좋습니다. 그리 큰 것이 아니므로 프레임 워크에 대한 좋은 소개를 얻을 수 있습니다. http://docs.slimframework.com/

루틴이 필요하지 않지만 각 루틴 전에 호출되는 훅. 저것은 호리 호리한 구조상 방법이다.

쉽게 해결할 수있는 방법은 보호되지 않은 페이지를 배열에 보관하고 해당 훅에서 요청이 보호되는지 여부를 확인하는 것입니다.

$app->hook('slim.before.dispatch', function() use ($app) { 
    $publicRoutes = array('login', 'welcome'); 

    if(!in_array($app->router()->getCurrentRoute(), $publicRoutes) 
     // Get the token 
     $result = API::validate($token); 
     if(!$result) { 
     $app->redirect('/login'); 
    } 
}); 

권한 수준, oauths 등으로 더 복잡한 프로세스를 처리하려면 미들웨어를 사용하십시오. Slim으로 이런 종류의 작업을 수행하는 것이 올바른 방법이기 때문에 나는 그것을 좋아합니다. 그리고 당신은 그것을 재사용 할 수 있습니다.

+2

Valeu, meu caro! – bodruk

+0

v3 이후에 후크가 더 이상 사용되지 않으므로 Slim 2에서만 작동합니다. – Raven

+0

@Raven "slim.before.dispatch"훅에서 Slim 3의 어떤 작업으로 "마이그레이션"하는 데 도움이되는 좋은 게시물을 알고 있습니까? – JESTech

관련 문제