|
|
1
2
您可以在模型上提供一个界面,该界面接受
这样,您的所有分页代码都包含在模型中,您可以自由使用Db适配器,而不会觉得自己破坏了这个概念。 此外,控制器实际上无论如何都不应该设置寻呼机,因为您认为它与数据绑定是正确的(模型是用于数据的,而不仅仅是数据库连接)。
|
|
|
2
2
Zend_Paginator现在有一个setFilter方法,允许您将数据从行对象加载到所需的任何模型对象:
|
|
|
3
1
一、 真正地 我需要一个解决方案,其中我可以使用Zend_Db_Table类方法作为我的分页器适配器的资源,而不是数组或Zend_Db_Select对象。 这种高级建模与Zend_Paginator的标准适配器不兼容。我继续为每个迫切需要答案的人解决了这个问题,就像我一样。
这是它在控制器中的工作原理:
此适配器工作的唯一要求是在模型方法参数列表中列出以下参数(以任何顺序[适配器将通过反射检测方法签名): $limit=0,$offset=0,$count=false 分页器将使用$limit、$offset和$count参数的适当值调用您的方法。就是这样! 例子:
|
|
|
4
0
好吧,我无法回答你对使用DbSelect的担忧,但我确实遇到了这段代码(在ibuildings博客的评论中),它与减少提取的行数有关。可能对一些读者有用。
|
|
|
5
0
使用MVC时需要考虑的一个重要因素是,模型适用于所有域逻辑,而控制器适用于业务逻辑。一般经验法则是,模型不应该知道接口(控制器或视图),但它们不需要是简单的数据库访问器。为了尽可能便携,他们也应该对格式或显示属性一无所知(除非这是域逻辑的一部分)。 事实上,所有操纵域逻辑的逻辑都应该在模型中,而不是在控制器中。控制器应将信息从界面传递到模型,根据需要进行转换,并选择要显示/更新的视图。如果它与接口无关,那么在模型中表示它可能比在控制器中更好,因为如果你以后决定交换控制器/视图配对,它将允许更多的代码重用。 理想情况下,您的模型应该提供一个访问所需信息的接口。只要模型不知道MVC的VC部分,那么如何在该接口后面实现就不是MVC关心的问题。如果这意味着传递一个分页器对象,这并没有直接违反MVC原则,但如果分页器与渲染本身有关(抱歉,我不知道Zend),最好传入它的接口(缺少渲染方法),让模型操纵/填充它,然后将其传回。这样,您就不会从模型中生成渲染代码,并且如果您决定稍后将应用程序作为控制台应用程序(或添加某种API接口),则可以替换paginator实现。 |
|
|
6
0
如果你使用DbSelect适配器,你可以简单地传入结果集,这在保持一些分离方面有很大的帮助。因此,在您的控制器中:
在视图中,您可以通过分页器访问数据
这是一个简化的示例(我还在引导程序中设置了默认滚动样式和默认视图部分),但我认为在控制器中设置它还不错,因为从模型中检索到的数据无论如何都是由控制器放置在视图中的,并且此实现使用的是结果集而不是模型。 |
|
|
7
0
您还可以直接实现Zend_Paginator_Adapter_Interface,或者在需要支持分页的任何模型中扩展Zend_Pagitor_Adapter_DbSelect。 这样,模型就不会直接了解视图、控制器甚至Zend_Paginator,但可以在最有意义的地方直接与Zend_Pagulator一起使用。
有了这样的东西,你可以在最有意义的地方使用这个类的实例直接实例化一个分页器:
现在,您可以将此类用作任何作为集合的“模型”的基类。 |