【问题标题】:Zend_Paginator return as objectsZend_Paginator 作为对象返回
【发布时间】:2011-05-07 23:10:14
【问题描述】:

Zend_Paginator 将结果作为标准数组返回,但我需要将结果作为类的实例返回,我该怎么做?

例如,我想要所有新闻文章,因此需要我的项目作为 News_Model_Article 的实例返回

【问题讨论】:

    标签: php zend-framework pagination


    【解决方案1】:

    使用 Db_Table 分页器,您可以这样启动它:

    $table = new Your_Zend_DbTable(); // Asuming this has configured the $rowClass property
    $paginator = Zend_Paginator::factory($table->select());
    $paginator->setItemCountPerPage(10);
    $paginator->setCurrentPageNumber(1);
    

    然后你可以循环 $paginator 对象并读取对象属性。

    【讨论】:

    • 你的意思是扩展 Zend_Db_Table_Row_Abstract?
    • 是的,您需要扩展 Zend_Db_Table_Abstract 和 Zend_Db_Table_Row_Abstract。在自定义 Zend_Db_Table 中,您必须将 $rowClass 设置为自定义 Zend_Db_Table_Row 的名称
    • 也许你应该展示完整的例子。这里有很多假设。
    【解决方案2】:

    您还可以创建自定义的 zend 分页器适配器,例如:

    class Application_Paginator_Adapter extends Zend_Paginator_Adapter_DbSelect
    {
    
      public function getItems($offset, $itemCountPerPage)
      {
        $this->_select->limit($itemCountPerPage, $offset);
        $rowset = $this->_select->getTable()->fetchAll($this->_select);
    
        $articleModels = array();
        foreach($rowset as $row) {
          $model = new News_Model_Article();
          $model->setTitle($row->article_title);
          ...........
          $articleModels[] = $model;
        }
    
        return $articleModels;
      }
    
    }
    

    如下使用:

    $adapter = new Application_Paginator_Adapter();
    $paginator = new Zend_Paginator($adapter);
    

    【讨论】:

    • 太好了,我正在寻找类似的东西。 StackOverflow 是否已经回答了我所有的问题?这很酷......有一件事:你会根据名称空间调用这个新类 Application_Paginator_Adapter 吗? “应用程序_”还是“我的_”?
    【解决方案3】:

    这可能是一个新功能,但如果您使用Zend_Paginator_Adapter_DbTableSelect,您应该已经获取对象 (Zend_Db_Table_Row)。

    【讨论】:

    • 只有当你实现 Zend_Db_Table_Row 时,如果你使用 ActiveRecord 模式你可能不会
    • 我已经测试过了,因为我自己在数据迁移中使用它。我不必执行任何操作。它立即生效。您必须使用Zend_Paginator_Adapter_DbTableSelect,它开箱即用。
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 2015-07-24
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多