【问题标题】:Zend framework data mappers + paginatorZend 框架数据映射器 + 分页器
【发布时间】:2011-10-05 02:59:31
【问题描述】:

我主要使用带有分页器的 zend_db_table,问题是它会返回 zend_db_rows 而不是我的数据映射器中的域对象。

比方说:

class Content_Model_ArticleMapper {
/*
 * @param Zend_Db_Select $select
 * @return Zend_Paginator
 */
    public function getPaginator($select = null){}
}

我可以通过覆盖自定义行集中的 _loadAndReturnRow 方法来破解它 然而,这很丑陋,因为当我查询表时我不再有 Zend_Db_Row 了。 并松散方法,例如我不想在域对象上复制的 save 。 :

class Content_Model_DbTable_Rowset_Articles extends Zend_Db_Table_Rowset {
        protected function _loadAndReturnRow($position)
    {
    if (!isset($this->_data[$position])) {
        require_once 'Zend/Db/Table/Rowset/Exception.php';
        throw new Zend_Db_Table_Rowset_Exception("Data for provided position does not exist");
    }

    // do we already have a row object for this position?
    if (empty($this->_rows[$position])) {

        $this->_rows[$position] = new Content_Model_Article($this->_data[$position]);
    }

    // return the row object
    return $this->_rows[$position];
    }
}

所以我的问题是你如何做到这一点? :) 你会编写自定义分页器适配器吗?

【问题讨论】:

  • “你写自定义的 Paginator 适配器吗?”,是的,我相信这是唯一的最佳实践。

标签: zend-framework pagination datamapper


【解决方案1】:

你可以在你的 DbTable 中设置一个 rowClass,比如

数据库表

class Content_Model_DbTable_Article extends Zend_Db_Table_Abstract {

    protected $_name = 'article';

    public function init() {
        $this->setRowClass('Content_Model_Article');
    }

}

领域模型

class Content_Model_Article extends Zend_Db_Table_Row {

    //for example
    public function getAuthorFullName() {
        return $this->author_firstname . ' ' . $this->author_lastname;
    }

}

现在行集中的行是 Content_Model_Article 的实例,您可以使用 Zend_Paginator_Adapter_Iterator。

使用分页器

$articleTable = new Content_Model_DbTable_Article();
$articleRowset = $articleTable->fetchAll();
$paginator = new Zend_Paginator(Zend_Paginator_Adapter_Iterator($articleRowset));
//now you can loop through the paginator
foreach($paginator as $article) {
    echo $article->getAuthorFullName();
}

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2011-03-22
    • 2012-10-01
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多