MVC и нумерация страниц - PullRequest
1 голос
/ 20 апреля 2010

Как новичок в MVC, я продолжаю увлекаться деталями. В частности, одна заставляет меня сделать паузу дольше, чем я ожидал; нумерацией страниц. Должна ли нумерация страниц идти в модели или в контроллере?

В случае, если это имеет значение, я использую ZF и хотел бы разбить на страницы результаты некоторых данных SQL.

Ответы [ 4 ]

8 голосов
/ 20 апреля 2010

Пагинация разделяет записи между страницами, поэтому она собирает только данные из модели, но имеет дело с представлением. Если модели не свойственно разделять выходные данные на несколько страниц (что встречается редко), я предлагаю установить логику разбиения на страницы (IE имеет дело с номером страницы) в контроллере.

Вы также можете рассмотреть возможность использования помощника вида, чтобы минимизировать код, который вы помещаете в свой контроллер (жирные контроллеры не очень хорошая вещь).

2 голосов
/ 20 апреля 2010

Дело в том, что Zend_Paginator имеет очень удобный набор адаптеров. Одним из них является Zend_Paginator_Adapter_DbSelect, который позволяет заключить запрос Zend_Db_Select для эффективного разбиения на страницы SQL-запроса (например, ограничения результатов). Итак, я понимаю, почему вы задаетесь вопросом, где их построить. Хотя вы действительно можете обсудить, является ли модель лучшим местом, лично у меня нет проблем с созданием метода в моей модели, например:

public function fetchEntitiesAsPaginator();

... который вернул бы Zend_Paginator экземпляр, внедренный с Zend_Paginator_Adapter_DbSelect.

КСТАТИ:
Лично я не считаю пагинатор просто для презентации. Я просто считаю это прославленным LimitIterator. Когда вы смотрите на это с этой точки зрения, вещи уже начинают выглядеть немного иначе. И как примечание: проблемы представления Zend_Paginator уже разделены помощником вида Zend_View_Helper_PaginationControl.

1 голос
/ 20 апреля 2010

Логика для разбиения на страницы идет в контроллере. Любые данные, которые вам нужны, например номер текущей страницы, должны указываться в модели.

В случае сомнений данные поступают в модель, а все, что влияет на данные, отправляется в контроллер.

0 голосов
/ 20 апреля 2010

Контроллер должен обработать параметр для номера страницы, а затем передать его модели, которая затем узнает, какие записи нужно извлечь.

Например ...

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

(я не знаю Zend Framework, но идея должна быть ясной)

...