2010-04-20 3 views
0

MVC newb로서, 계속 세부 사항을 포착합니다. 하나는 특히 내가 기대했던 것보다 더 오래 멈추는 것입니다. 쪽수 매기기. 페이지 매김을 모델이나 컨트롤러에서 사용해야합니까?MVC 및 페이지 매김

필자는 ZF를 사용하고 있으며 일부 SQL 데이터의 결과에 페이지 매김을하고 싶습니다.

+0

나는 ZF에 대해 들어 본 적이 없다. 무엇입니까? – Luke101

+0

젠드 프레임 워크, 그것은 PHP 프레임 워크입니다. –

답변

6

페이지 매김은 페이지 간 레코드를 분리하므로 모델에서 데이터를 수집하지만 프레젠테이션을 처리합니다. 드물게 발생하는 여러 페이지의 출력을 분할하는 모델의 본질이 아니라면 제 제안은 페이지 번호를 다루는 페이지 매김 로직을 컨트롤러에 넣는 것입니다.

컨트롤러에 넣은 코드를 최소화하기 위해 뷰 도우미를 활용하는 것도 좋습니다 (뚱뚱한 컨트롤러는 좋지 않습니다).

+0

보기 도우미 제안 +1. –

1

페이지 매김에 대한 로직이 컨트롤러에 들어갑니다. 현재 페이지 번호와 같이 필요한 모든 데이터가 모델에 있어야합니다.

의심 스러울 때 데이터가 모델에 들어가고 데이터에 작용하는 모든 것이 컨트롤러에 저장됩니다.

+0

마지막 문장이 완벽하게 이해되지만, "현재 페이지 번호는 모델에 있어야합니다"와 동의하지 않습니다. IMHO 모델은 페이지 매김을 신경 쓰지 않아야합니다. 데이터가 사용자에게 제공되는 방식을 알 필요가 없습니다. 컨트롤러의 모든 페이지 매김 로직을 유지하고 모델에 "LIMIT/OFFSET"커플을 가질 수 있으므로 호출 메소드에서 필요한 정확한 레코드를 지정할 수 있습니다. 모델이 페이지 매김을위한 것이 든 다른 것이지 여부를 모델에 알리지 않고. 물론, 내 2cc. – maraspin

+0

Tom이 ViewModel을 의미했을 수 있습니다. 컨트롤러에서 페이징 정보를 뷰로 전달하지 않으면 ViewBag가없는 한 "페이지 4/10"과 같은 것을 어떻게 표시 할 수 있습니까? – pkr298

0

컨트롤러가 페이지 번호에 대한 매개 변수를 처리 한 다음이를 모델로 전달하면 모델에서 검색 할 레코드를 알 수 있습니다. 예를 들어

...
$userModel->getAll((int) $_GET['page']); 

(내가 젠드 프레임 워크를 모르겠지만, 아이디어가 명확해야한다)

2

는 것은 Zend_Paginator이 어댑터의 매우 편리한 설정을 가지고,하지만입니다 . 이 중 하나는 Zend_Paginator_Adapter_DbSelect이며 Zend_Db_Select 쿼리를 사용하여 SQL 쿼리를 효율적으로 페이지 매김 (예 : 결과 제한) 할 수 있습니다. 그래서 나는 왜 당신이 이들을 만들지 궁금해하는 이유를 알 수 있습니다. Zend_Paginator_Adapter_DbSelect와 주입 Zend_Paginator 인스턴스를 반환하는 ...

public function fetchEntitiesAsPaginator(); 

: 당신은 실제로 모델이 최적의 장소인지를 토론 할 수 있지만, 나는 개인적으로처럼 내 모델의 방법을 만드는 문제가 없습니다 .

BTW :
필자는 개인적으로 프리젠 테이션을 위해 페이지 인쇄기를 개인적으로 고려하지 않습니다. 나는 단지 그것을 영화 롭게 된 LimitIterator라고 생각합니다. 당신이 그 관점에서 볼 때, 사물은 이미 조금 다르게 보이기 시작합니다. 그리고 부수적으로 : Zend_Paginator의 프리젠 테이션 우려는 이미 어쨌든 Zend_View_Helper_PaginationControl 뷰 도우미에 의해 분리됩니다.