2014-04-22 3 views
8

Laravel 4의 그룹 경로에 여러 개의 필터를 추가 할 수 있습니까?Laravel 4 라우트 그룹에 여러 개의 필터를 적용하는 방법은 무엇입니까?

API 중심 응용 프로그램에 대해 2 가지 인증 방법이 있습니다. 표준 인증 (웹 사이트의 경우 'auth'필터)이고 토큰 (모바일 앱의 경우 'auth.token'필터)이있는 인증입니다.

<?php 
    Route::group(array('prefix' => 'api/'), function() { 
     #Custom routes here 
    }); 
?> 

은 이상적으로는 두 개의 필터 중 하나가를 전달하는 경우 즉, 그룹이 액세스 할 수 싶습니다.

답변

19

에 대한 documentation 할 수 있습니다 : 그러나

Route::group(['before' => 'auth|csrf'], function() 
{ 
    // 
}); 

당신이 그것을 accesible 경우 중 하나의를 만들고 싶어 필터가 통과하면 조금 더 작성해야합니다 (filters.php에서) :

routes.php

Route::group(['before' => 'csrf-or-auth'], function() 
{ 
    // 
}); 

에서

function csrfFilter() 
{ 
    if (Session::token() != Input::get('_token')) 
    { 
     throw new Illuminate\Session\TokenMismatchException; 
    } 
} 
function authFilter() 
{ 
    if (Auth::guest()) return Redirect::guest('login'); 
} 

Route::filter('csrf-or-auth', function() 
{ 
    $value = call_user_func('csrfFilter'); 
    if ($value) return $value; 
    else return call_user_func('authFilter'); 
}); 

는 필터가 통과 할 때 아무것도 돌려주지해야 기억하십시오. 도움이 되었기를 바랍니다.

+1

구문 오류가 있습니다. 'routes.php' 파일에 놓여 져야하는 코드는'Route :: group (array ''before '=' 'csrf-or-auth'), function() { })이어야하고, – Amr

+0

@ 암. 이제 수정되었습니다 – edpaez

+0

마지막 두 괄호 (세미콜론 앞에있는 괄호) 중 하나를 제거해야합니다. 또한 첫 번째 코드 스 니펫에서도 동일한 변경 사항을 적용합니다. – Amr

2

당신은 할 수 laravel와

Route::group(array('prefix' => 'api/', 'before' => 'filter1|filter2'), function() 
{ 
    Route::get('api1', function() 
    { 
     // Has Filter1 and filter2 
    }); 

    Route::get('api2', function() 
    { 
     // Has filter1 and filter2 
    }); 
}); 

체크 그 자세한 내용

+2

op가 요청되었거나 AND와 어떻게 수행했는지 설명했습니다. | before 속성은 AND, 실제로는 배열 분리자를 의미합니다. – malhal

관련 문제