2013-08-12 2 views
2

나는 그림 갤러리 웹 응용 프로그램을 만들고 있습니다. 그것은 많은 접근 경로를 가지고 있으며, 모두 갤러리를 같은 방식으로 렌더링해야합니다. 유일한 차이점은 그림의 순서입니다. 그래서 예를 들어유사한 작업을 수행하는 경로를 처리하는 가장 좋은 방법은 무엇입니까?

:

mysite.com/favorites -> shows all the pics ordered by number of favorites 
mysite.com/views -> shows all the pics ordered by number of views 
mysite.com/date -> shows all the pics ordered by date 
mysite.com/votes -> shows all the pics ordered by votes 

그들 사이 너무 유사 이러한 모든 작업을이기 때문에,이 컨트롤러의 경로 당 하나 개의 동작을 정의하고 매개 변수로 명령을 전달하는 좋은 방법인가? 또는이 논리를 모델에서 처리해야합니까?

답변

2

조치가 매개 변수와 매우 다른 경우, 해당 매개 변수를 허용하는 동작이 이 될 수 있습니다. 그 마지막 것은 규칙이 아니라 그냥 선호하는 것입니다.

class GalleryController extends BaseController 
{ 
    public function showPics($orderBy) 
    { 
     $pics = $this->service->getPics($orderBy); 
     return View::make('gallery')->with('pics', $pics); 
    } 
} 

그것은 비록 다음과 같이

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

그런 다음 컨트롤러에 당신이 뭔가를해야합니다 : 매개 변수를 사용하여 하나 개의 경로를 사용하여 다음과 같이 특정 경우

당신은 그것을 처리 할 수 ​​있습니다 괜찮습니다. 고려해야 할 몇 가지 사항이 있습니다.

  1. 그것은 더 의미 전문 액션 즉 : showFavorites, showRecents이, 을 showMostVoted showMostViewed와 컨트롤러가합니다.
  2. 을 생각해보십시오. 서로 다른보기, 다른 데이터 집합을 가진 다른 중첩 된 자식을 제공하려는 경우 각 사례에 대해 조치를 취하는 것이 좋습니다.
  3. 코드 가독성. 여러 개의 if 문, 여러 개의 return 문, 컨트롤러가 여러 개의 catch 절이있는 큰 try-catch 블록으로 싸인 것을 상상해보십시오. 다음 프로그래머가 스파게티 코드로 뇌의 경과를 피할 수 있다면 고려하십시오.
+0

좋은 답변입니다. 감사합니다. –

관련 문제