Zend_Paginator模糊MVC行

Sea*_*ing 6 php model-view-controller zend-framework zend-paginator

我正在开发一个Zend Framework(1.7)项目,其结构松散地基于快速入门应用程序的结构 - 前端控制器,动作控制器,视图和模型,它们使用Zend_Db_Table来访问数据库.我的一个主要模型依赖于一些昂贵的连接来提升其主要列表,所以我正在研究使用Zend_Paginator来减少从数据库带回的行数.我的问题是Zend_Paginator只带有4个适配器,其中没有一个看起来非常适合我.

  • 数组:构建数组以提供给ZP将涉及获取我想要避免的所有记录
  • 迭代器:一个愚蠢的迭代器会出现与数组相同的问题,而一个聪明的迭代器会觉得它不适合模型
  • DbSelect:将DbSelect对象放到Controller中会让控制器与我的数据库的内部工作方式不一致(更不用说生成原始结果行而不是封装对象)
  • DbTableSelect:与DbSelect相同
  • 空适配器:手动来回传递所有细节.

将分页器传递到模型中感觉就像它也会违反MVC分离.问题是我错误地构建了我的模型,我是关于保持MVC分离的教条还是我错过了将所有活动部件粘在一起的干净,优雅的方法?

dco*_*eau 2

您可以在模型上提供一个接口,该接口接受$current_page参数$per_page并返回当前页面的数据集以及分页器对象。

这样,您的所有分页代码都包含在模型中,并且您可以自由使用数据库适配器,而不会觉得自己破坏了概念。

另外,控制器实际上不应该设置寻呼机,因为您将其与数据绑定在一起是正确的(并且模型用于数据,而不仅仅是数据库连接)。

class Model
{
    //...
    /**
     * @return array Array in the form: array( 'paginator' => obj, 'resultset' => obj )
     */
    public function getAll( $where = array(), $current_page = null, $per_page = null );
    //...
}
Run Code Online (Sandbox Code Playgroud)