2014-09-20 2 views
0

Laravel을 배우려고합니다. 사용자가 컨트롤러를 호출하기 전에 로그인했는지 확인하고 싶습니다. 이 작업을 수행하는 데는 적어도 3 가지 방법이있는 것으로 보이며 이들 간의 차이점을 알고 싶습니다. Laravel에서 필터를 사용하는 방법 - 차이점은 무엇입니까

Route::get('/main', '[email protected]')->before('auth'); 

Route::get('/main', array('before' => 'auth', 'uses' => '[email protected]')); 

또는 컨트롤러 생성자에서

:

public function __construct() { 
    $this->beforeFilter('auth'); 
} 

답변

2

차이는 없습니다. Laravel은 다양한 방식으로 많은 작업을 수행 할 수있게 해주는 프레임 워크입니다.

나는 예를 들어, 그들을 그룹화 경로에 필터를 추가하는 것을 선호 : 이러한 사용의 이점 중 하나가

// logged users paths 
Route::group(
    ['before' => 'auth'], 
    function() { 
     Route::get('/dashboard', [ 
       'as' => 'dashboard', 
       'uses' => '[email protected]' 
      ]); 
    } 
); 

// paths only for admin 
Route::group(
    ['before' => 'admin'], 
    function() { 
     Route::get('/admin', 
      ['as' => 'admin_dashboard', 
      'uses' => '[email protected]' 
      ]); 
     Route::get('/categories/{page?}', 
      ['as' => 'categories', 
      'uses' => '[email protected]' 
      ])->where('page', '[1-9]+[0-9]*'); 
    } 
); 

- 그 '모든 경로가 올바른 필터가있는 경우에 볼 훨씬 쉽게.

기록 된 사용자에게만 일부 콘텐츠를 표시하고 인증 필터를 사용해야한다고 가정합니다. 로그인 한 사용자의 컨텐트를 표시 할 컨트롤러가 많습니다. 당신이 그 컨트롤러 또는 부모 컨트롤러의 생성자에 직접 beforeFilter를 사용하는 경우

다음과 같은 일이 일어날 수 있습니다

  • 당신이 컨트롤러 생성자에서 잊을 수
  • 모든 컨트롤러 생성자으로, beforeFilter를 넣어하는 것을 잊지 수 있습니다 (예 : beforeFilter가있는 곳)
  • 원하는 클래스를 확장하지 않아도됩니다. 예를 들어 BaseController를 확장하고 beforeFilter를 AuthController에 정의하고 하나 또는 일부 클래스에서 BaseController를 확장하면

그런 상황에서는 로그인하지 않은 사용자의 콘텐츠를 표시 할 수 있습니다. 왜냐하면 각 컨트롤러에서 auth 필터를 기억해야하기 때문이며 모든 것을 올바르게 수행했는지 확인하려면 모든 컨트롤러의 코드를 살펴 봐야합니다 .

경로 그룹화를 사용하면 (위에서 설명한 것처럼) 하나의 파일을 쉽게 볼 수 있으며 (물론 경로 지정을 위해 하나의 파일을 사용한다고 가정) 어떤 경로가 auth 필터를 사용하고 어떤 경로는 사용되지 않는지를 알 수 있습니다.

당연히 나는 많은 사람들이 저것에 관하여 그들 자신의 견해를 가질 것이라고 생각하지만 그것은 나에게 경로에서 필터를 사용하는 개인적인 취향이다.

1

당신의 두 가지 방법의 차이, 단지 다른 구문 스타일이 없습니다.

auth 필터를 BaseController에 두는 것이 좋습니다. 그러면 내가 승인하고자하는 모든 컨트롤러가 BaseController에서 확장됩니다. 한번 쓰고 어디서나 쓰십시오. Btw, csrf 필터를 여기에 넣을 수도 있습니다.

class BaseController extends Controller { 
    public function __construct() { 
    $this->beforeFilter('auth'); 
    $this->beforeFilter('csrf', array('on' => 'post')); 
    } 
} 
관련 문제