2014-11-24 2 views
1

사용자 인증을 기반으로 단일 URI를 여러 컨트롤러로 라우팅하려고합니다. 기본적으로 사용자가 로그인하지 않고 루트 URI를 조회하면 일반 방문 페이지를 표시하고, 로그인하지 않은 경우 루트 URI에 액세스하여 맞춤형 콘텐츠를 표시합니다.Laravel 4.2 라우팅 필터 루트 URI에 대한 인증/게스트 오류

표준 out-of-the-box 필터 (auth/guest) 및 테스트를 위해 신속하게 인증/해지 할 수 있도록 설정된 다른 경로 (여기에 표시되지 않음)를 사용하고 있습니다.

이 아이디어는 충분히 솔직 보인다 작동해야처럼 날 것으로 보인다, 아직 Laravel을 올바르게 처리되지 않은 : 나는이에 무엇을 위해

Route::group(array('before' => 'auth'), function() { 
    Route::get('/', function() { echo 'logged in'; }); 
}); 

Route::group(array('before' => 'guest'), function() { 
    Route::get('/', function() { echo 'logged out'; }); 
}); 

그것은 중요하지 않습니다, Laravel은하지 않습니다 사용자가 인증되면 인증 필터를 확인합니다. 첫 번째 경로는 건너 뛰고 게스트 필터가 먼저 실행되거나 단독으로 (아마도 더 정확하게) 실행됩니다.

필터 중 하나에서 실수로 변경 한 적이 있습니까? 왜 이런 일이 일어나는 걸까요? 이 문제가 발생하지 않아야합니까?

마치 Laravel이 단일 URI를 테스트하기 위해 여러 작업을 할당 할 수없는 것처럼 보입니다. 나는 특히 문제를 파악하기 위해 코드베이스를 파고 드는 시간을 보내고 싶지 않다. 이것은 프레임 워크 자체에 대한 나쁜 디자인 결정 인 것처럼 보입니다. 그렇다면 여기에서 문제를 설명 할 수 있습니다.

전 건강 검사가 필요합니다.

답변

0

그것은이

Route::group(array('before' => 'guest|auth'), function() { 
    Route::get('/', function() { 
     if(Auth::check()) { 
      return "logged in"; 
     } 

     return 'logged out'; 
    }); 
}); 

하나의 URI에 대해 여러 컨트롤러 액션의 요점은 무엇이어야 하는가? 나는 꽤 혼란 스럽다. URI는 하나의 Controller에 의해서만 제공됩니다. 그렇지 않으면 DRY, IMO가 표시됩니다.

+0

예, 이미 알고 있지만 경로 파일에서 논리를 피하려고했습니다. 물론 루트 URI는 사용자 인증에 따라 여러 상태를 가지므로 여러 동작이 있습니다. 필자는이를 로그 아웃 (방문 페이지 및 수신 영역) 및 로그인 (개인화 된 콘텐츠) 용으로 여러 컨트롤러로 더 추상화했습니다. 아무도 응답하지 않았으므로 고맙습니다. :) – ineedhelp