2013-08-13 2 views
2

내 사진 갤러리 앱에 네 개의 경로가 있습니다. 그들은 모두 똑같이합니다 : 데이터베이스를 쿼리하고 그림을 렌더링하십시오. 그들 사이의 유일한 차이점은 기록의 순서입니다. 예를 들어이 들어Laravel 경로에서 컨트롤러 또는 경로 매개 변수로 컨트롤러에서 경로로

http://example.com/favorites : shows pics ordered by favorites 
http://example.com/random : shows pics ordered by random 
http://example.com/votes  : shows pics ordered by votes 
http://example.com/views  : shows pics ordered by views 

, 내 갤러리 컨트롤러에 하나 액션을 사용하고 매개 변수로 명령을 전달하려는.

Route::get('/{orderby}', '[email protected]') 

그런 다음 컨트롤러에서 매개 변수를 얻을 :

은 내가이 길을 만들 수 있습니다 알고

class GalleryController extends BaseController 
{ 
    public function showPics($orderby) 
    { 
     //query model ordering by $orderby and render the view 
    } 
} 

문제는 내가 example.com/whatever 캡처하지 않을 것입니다, 네 가지 특정 경로 만.

경로에서 컨트롤러 작업에 매개 변수를 전달하는 방법이 있습니까? 아니면 컨트롤러에서 현재 액세스 한 경로를 읽으려고합니까?

답변

12

경로에 매개 변수 제약 조건을 추가하여 가능한 값을 정규식으로 제한 할 수 있습니다 (아래 그림 참조).

Route::get('/{orderby}', '[email protected]') 
    ->where('orderBy', 'favorite|random|vote|view'); 

그리고 여러분이 알다시피, 당신은 매핑 컨트롤러 액션에서 그 값을 얻을 것이다 :

public function showPics($orderby) 
{ 
    dd($orderby); // favorite, random, vote or view. 
} 

당신은 문서에서 매개 변수 경로 제약 조건에 대한 자세한 내용을보실 수 있습니다 : http://laravel.com/docs/routing#route-parameters

+0

내 특정을 문제는'public function showPics ($ orderby) {..}'처럼 컨트롤러 메소드에 변수를 전달하지 못했습니다. 변수의 값을 간접적으로 메소드 내에서 얻으려고했다.'Input :: get ('orderby')'; 그리고 이것은 효과가 없었습니다. 그러나 길을 세우는 방법은 나에게도 비슷하게 작용했습니다. – racl101

관련 문제