1

findParentRow()是否可以在 Zend_Paginator 对象中使用该方法?我正在尝试一些代码,这些代码在 fetchAll 从数据库结果集中返回的对象上运行良好并且运行良好。但是,使用 Zend_Paginator 对象它不起作用。

在我的控制器中,我有:

public function downloadedAction()
{
    $images = new Model_ApplicationImages();
    $paginator = $images->fetchPaginated();
    $paginator->setCurrentPageNumber($this->_getParam('page'));
    $this->view->paginator = $paginator;
}

在我的模型中,我有:

public function fetchPaginated()
{
    $select = $this->select()
                   ->from($this->_name)
                   ->where('status = ?','approved')
                   ->where('downloaded = ?','0');
    $adapter = new Zend_Paginator_Adapter_DbSelect($select);
    $paginator = new Zend_Paginator($adapter);
    $paginator->setItemCountPerPage(10);
    return $paginator;
}

在我看来,我有:

    $this->partialLoop()->setObjectKey('paginator');
    echo $this->partialLoop('admin/list-downloaded.phtml', $this->paginator); 

并在部分:

    $this->paginator->findParentRow('Model_Application')->name

似乎对象键没有被使用或没有被正确设置为部分var_dump($this->paginator)NULL,并且从分页器传递的其他值在那里但是在下面$this->key而不是$this->paginator->key它们应该是

4

3 回答 3

3

APartialLoop本质上为传递给它Partial的数组或对象中的每个元素运行 a。Traversable因此,当它到达您的局部视图脚本时,您不再使用该Paginator对象,而是使用其分页内容。

在部分循环中,setObjectKey()工作在部分级别。您可以将对象数组Traversable(或Traversable迭代对象的Traversable对象)传递给部分循环,然后在部分循环中,每个对象都可以通过对象键访问。

但是,您正在使用的DbSelect分页器适配器为每个页面返回一个行数组,因此没有任何对象可以放入paginator对象键中,并且它仍然未使用。

您应该改用DbTableSelect适配器,它将返回一个行集。

如果您需要访问 Paginator 本身,您应该使用部分代替。这样您就可以setObjectKey()自己循环遍历分页器中的页面。

我建议您将 Zend 框架的源代码放在手边,以便在某些事情无法按您预期的方式工作时。可悲的是,我通过阅读代码比阅读文档更成功地弄清楚了如何使用它。

于 2010-02-08T20:56:01.113 回答
1

实际上,您提供的示例代码非常正确,我的设置非常相似,尽管我使用 Zend_Paginator_Adapter_DbTableSelect 作为适配器。所以,原则上肯定是可以的。

值得在控制器操作中检查 fetchPaginated() 返回的内容。

可能值得检查的另一件事是 $view->paginator 是否不会在您的视图脚本中被覆盖(由于不同的原因,这是一件坏事)。另外,您实际上可以使用对象键名,例如在 setObjectKey() 中使用“模型”而不是“分页器”。

PS不确定它是否相关,但我在控制器中设置了对象键:

$this->view->partialLoop()->setObjectKey('model');
$this->view->partial()->setObjectKey('model');
于 2010-02-03T13:10:48.790 回答
1

返回数组的getItems()方法和rowset的方法,只用,不用...Zend_Paginator_Adapter_DbSelectgetItems()Zend_Paginator_Adapter_DbTableSelectZend_Paginator_Adapter_DbTableSelectZend_Paginator_Adapter_DbSelect

于 2011-10-21T18:59:54.897 回答