7

クエリに 6 つのレコードがあり、このコードはそれを 3 ページに正しく表示します。

(action)
    public function listAction()
        {
            $page  = (int) $this->params()->fromRoute('id', 0);
            $posts = $this->getPagesTable()->selectPages();
            $paginator = new Paginator(new PaginatorIterator($posts));
            $paginator->setCurrentPageNumber($page)
                      ->setItemCountPerPage(2)
                      ->setPageRange(7);
            return new ViewModel(array(
                    'paginator' => $paginator,
                    ));
        }
(view)
    <?php foreach ($paginator as $post) : ?>
         <h2><?php echo $this->escapeHtml($post->id); ?></h2>
         <div><?php echo $this->escapeHtml($post->name);?>
     <?php endforeach; ?>

しかし、 foreach ループを実際に追加すると、次のようになります。

public function listAction()
{
    $page  = (int) $this->params()->fromRoute('id', 0);
    $posts = $this->getPagesTable()->selectPages();
    $paginator = new Paginator(new PaginatorIterator($posts));
    $paginator->setCurrentPageNumber($page)
              ->setItemCountPerPage(2)
              ->setPageRange(7);
    foreach ($paginator as $post) {
        // some code or  empty foreach
    };
    return new ViewModel(array(
            'paginator' => $paginator,
            ));
}

paginator は最後の (3) ページを表示しません (1 ページと 2 ページは正しく表示されます)。 なんで? ありがとうございました!


foreach {} の後に $paginator->getIterator()->rewind() を追加すると、ページネーターは最初のページのみを表示し、2 ページ目と 3 ページ目は表示しません。

4

2 に答える 2

0

イテレータ パターンはポインタのようなもので、反復後にリセットする必要があります。

于 2013-04-13T15:12:28.583 に答える
0

私も同じ問題に直面しました

でも今は解決しました

i am using iterator_to_array($userList);

この行を削除した後の表示ページでは、正常に機能しています。

于 2017-10-17T15:06:07.503 に答える