代码之家  ›  专栏  ›  技术社区  ›  Glen Solsberry

MVC和分页

  •  1
  • Glen Solsberry  · 技术社区  · 16 年前

    作为一个MVC新手,我一直在关注细节。一个特别的原因是我停顿的时间比我想象的要长;分页。分页应该在模型中进行还是在控制器中进行?

    如果这很重要,我将使用ZF,并希望对一些SQL数据的结果进行分页。

    4 回复  |  直到 16 年前
        1
  •  7
  •   maraspin    16 年前

    分页将记录分隔在页面之间,因此它只收集来自模型的数据,但处理表示。除非模型的本质是将输出拆分为多个页面(这种情况很少发生),否则我的建议是在控制器中放置分页逻辑(即处理页码)。

    您可能还想考虑利用视图帮助器,将放入控制器的代码最小化(胖控制器不是一件好事)。

        2
  •  2
  •   Decent Dabbler    16 年前

    但问题是, Zend_Paginator 有一套非常方便的适配器。其中一个是 Zend_Paginator_Adapter_DbSelect 它允许您将 Zend_Db_Select 用于有效分页SQL查询的查询(例如,限制结果)。所以我知道你为什么想知道在哪里建造这些。尽管您确实可以争论模型是否是最佳位置,但我个人并不存在在我的模型中创建方法的问题,例如:

    public function fetchEntitiesAsPaginator();
    

    …它将返回 泽德·帕吉纳 实例注入了 Zend_Paginator_适配器\u DBSelect .

    顺便说一句:
    我个人并不认为一个异教徒只是为了展示。我只是认为它是一个光荣的限制器。当你从这个角度看的时候,事情已经开始有点不同了。作为旁注:陈述关注的是 泽德·帕吉纳 Zend_View_Helper_PaginationControl 无论如何,视图助手已经存在。

        3
  •  1
  •   Tom Cabanski    16 年前

    控制器中有分页逻辑。您需要的任何数据,例如当前页码,都应该放在模型中。

    当有疑问时,数据进入模型,所有作用于数据的东西进入控制器。

        4
  •  0
  •   alex    16 年前

    控制器应该处理页码的参数,然后将其传递给模型,模型将知道要检索哪些记录。

    例如。。。

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

    (我不知道Zend框架,但是应该清楚的知道这个想法)