gpt4 book ai didi

php - Zend_Paginator 模糊 MVC 行

转载 作者:可可西里 更新时间:2023-11-01 13:23:43 24 4
gpt4 key购买 nike

我正在开发一个 Zend Framework (1.7) 项目,该项目的结构松散地基于快速启动应用程序的结构 - 前端 Controller 、 Action Controller 、使用 Zend_Db_Table 访问数据库的 View 和模型。我的一个主要模型依赖于一些昂贵的连接来拉出它的主要列表,所以我正在研究使用 Zend_Paginator 来减少从数据库中带回的行数。我的问题是 Zend_Paginator 只有 4 个适配器,似乎没有一个适合我。

  • Array:构建数组以提供给 ZP 将涉及获取所有记录,这是我试图避免的
  • 迭代器:笨拙的迭代器会出现与数组相同的问题,而聪明的迭代器会觉得它不适合模型
  • DbSelect:将 DbSelect 对象提交给 Controller 会使 Controller 与我的数据库的内部工作联系在一起(更不用说生成原始结果行而不是封装对象)
  • DbTableSelect : 与 DbSelect 相同
  • Null Adapter:手动来回传递所有细节。

将分页器传递到模型中感觉也违反了 MVC 分离。问题是我错误地构建了我的模型,我在保持 MVC 分离方面过于武断,还是我错过了一种将所有事件部件粘在一起的干净、优雅的方式?

最佳答案

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

通过这种方式,您的所有分页代码都包含在模型中,您可以自由使用 Db 适配器,而不会觉得您已经打破了这个概念。

另外, Controller 真的不应该设置寻呼机,因为它与数据相关联是正确的(模型是针对数据的,而不仅仅是数据库连接)。

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

关于php - Zend_Paginator 模糊 MVC 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/342777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com