2016-07-27 1 views
2

내가 domain/something/someaction/10를 입력하면 나는 다음과 같은 라우팅 규칙이를 잡을 것입니다 : 내가 원하는이 폐쇄 내부어떻게 컨트롤러 액션에 I에게 길을 5.2

Route::get('/{resource}/someaction/{id}', function($resource,$id){ 
    //do something 
}); 

지금 이 요청을 컨트롤러의 동작으로 전달합니다. 그러나 예를 들어, 어떤 수 :

$controller_name = transformThisResource($resource).'Controller'; 
$controller = new $controller_name; 
$controller->someaction($id); 

오전 데 특별한 문제는 3 개 정확히 그들 각각의 행동의 행동 같은 수행이 프로젝트에 약 30 컨트롤러와 3 개 작업이 있다는 것입니다. 위에서 설명한 것과 같은 기능을 사용하면 경로 파일에 3 개의 규칙 만 필요합니다.

답변

0

다른 컨트롤러의 메서드에서 컨트롤러의 메서드를 호출하는 것이 적절하지 않다고 생각합니다.

transformThisResource() 메서드는 실제로 리디렉션 경로를 반환해야한다고 생각합니다. 예를 들어, 당신이 다른 컨트롤러의 방법 내에있는 일부 코드를 실행하려는 사용자 방문 domain/something/someaction/10이 (제어기 A 안에있는) 경우 URI /the/right/controller/method 또는 {resource}/right/controller/{id}에 응답 (이하 컨트롤러 B로 함)한다고 가정 해 봅시다.

public function controllerADefaultResponder($resource, $id) 
{ 
    return redirect(mapToUri($resource, $id)); 
} 

위의 코드는 /the/right/controller/method?resource=domain/something&id=10 또는 domain/something/right/controller/10와 같은 링크로 리디렉션 할 수 있습니다 : 내가이 사건에서하는 것은 제어기 A에서 리디렉션을 반환합니다. 두 링크의 유일한 차이점은 요청에서 요청으로 데이터를 전달하는 방법입니다. 하나는 경로 인수를 사용하고 다른 하나는 GET 매개 변수를 사용합니다.