2014-04-09 4 views
1

나는이 같은 경로를 가지고 :우선 순위 설정 Laravel 4 개 노선

Route::group(array('before' => 'installed'), function() { 

    Route::group(array('before' => 'auth_admin', 'prefix' => 'admin'), function() 
    { 

     Route::group(array('prefix' => 'gag'), function() { 

      Route::get('/', 'Admin\\[email protected]'); 
      Route::get('delete/{id}','Admin\\[email protected]'); 

     }); 

    }); 

}); 

나는 나의 demo 응용 프로그램 콘텐츠를 삭제하지 못하도록해야합니다. 그래서 실제 경로 앞에 다음 코드를 추가했습니다.

if(App::environment() === 'demo') 
{ 
    Route::get('admin/gag/delete/{id}', function() { 
      die("You can't delete anything on demo application."); 
    }); 
} 

//Actual routes are at the below. 

그러나 Route::get('delete/{id}','Admin\\[email protected]');이있는 경우 작동하지 않습니다. 어쨌든, Laravel은이 if 블록과 우선 순위를 무시합니다. (비록 블록이 상단에 있다면)

routes.php은 경로가 파싱 된 후 내 if 블록을 구문 분석합니다.

어떻게 Laravel이 내 데모 경로의 우선 순위를 매길 수 있습니까? 이 기능과 같은 일부 기능에 대한 액세스를 제한하고 싶습니다.

ps. if 블록에 모든 경로를 추가하고 싶지 않습니다. 나는 if 블록의 경로에 우선 순위를 부여하기를 원한다.

Route::filter('checkDemo', function() 
{ 
    if (App::environment() === 'demo') 
    { 
     return Redirect::to('home')->withMessage('You can''t delete anything on demo application.'); 
    } 
}); 

그리고 경로에 필터를 설정합니다 :

답변

2

경로 필터는 제한 이런 종류의 작업을 수행하기 위해 더 나은

Route::group(array('prefix' => 'gag', 'before' => 'checkDemo'), function() 
{ 
    ... 
}); 

또는 당신은 단지 특정 경로를 필터링 할 수 있습니다

Route::get('delete/{id}', array('before' => 'checkDemo', 'uses' => 'Admin\\[email protected]')); 
+0

그래,하지만 모든 경로를 gag 접두어로 복제해야합니다. 방금/{id} 경로 삭제를 재정의해야합니다. – Aristona

+0

필터를 복제 할 필요가 없으므로 무시하려는 하나의 경로에만 필터를 추가 할 수 있습니다. 방금 편집했습니다. –

+0

사실,하지만 좀 더 쉽게 관리 할 수 ​​있도록 별도의 장소에 작성할 수 있기를 바랍니다. 귀하의 솔루션도 멋지게 보입니다. 다르게 할 수있는 다른 방법이 없다면, 이것을 답으로 선택하겠습니다. – Aristona