Zend Paginator + Table Gateway:错误

时间:2013-03-07 12:19:27

标签: php pagination zend-framework2 zend-paginator tablegateway

错误:paginator的元素是对象(不是数组)。 var_dump($records)

object(Records\Model\Records)#240 (11) { ["id"]=> NULL ["name"]=> string(9) "5453gdfgd" ["email"]=> string(16) "igor@bk.ru" ["homepage"]=> string(0) "" ["text"]=> string(5) "ghjkj" ["image"]=> string(5) "Array" ["file"]=> string(0) "" ["ip"]=> NULL ["browser"]=> NULL ["date"]=> string(19) "2013-03-05 23:24:49" ["inputFilter":protected]=> NULL }  
object(Records\Model\Records)#241 (11) { ["id"]=> NULL ["name"]=> string(9) "5453gdfgd" ["email"]=> string(16) "igor@bk.ru" ["homepage"]=> string(0) "" ["text"]=> string(5) "ghjkj" ["image"]=> string(5) "Array" ["file"]=> string(0) "" ["ip"]=> NULL ["browser"]=> NULL ["date"]=> string(19) "2013-03-05 23:23:37" ["inputFilter":protected]=> NULL }

控制器:

    protected $recordsTable;
        public function indexAction()
        {
            $field = (string) $this->params()->fromRoute('field', 'date');
            $order = (string) $this->params()->fromRoute('order', 'desc');
            $array = $this->getRecordsTable()->fetchAll($field, $order);

            $paginator = new Paginator\Paginator(new Paginator\Adapter\Iterator($array));
            $paginator->setCurrentPageNumber($this->params()->fromRoute('page', 1));
            $paginator->setItemCountPerPage(2);
            //print_r($paginator);
            $vm = new ViewModel(array('records' => $paginator));
            return $vm;
        }

    public function getRecordsTable()
        {
            if (!$this->recordsTable) {
                $sm = $this->getServiceLocator();
                $this->recordsTable = $sm->get('Records\Model\RecordsTable');
            }
            return $this->recordsTable;
        } 

RecordsTable:

    protected $tableGateway;

        public function __construct(TableGateway $tableGateway)
        {
            $this->tableGateway = $tableGateway;
        }

        public function fetchAll($field, $order)
        {
            $this->field = $field;
            $this->order = $order;
            $resultSet = $this->tableGateway->select(function (Select $select) {
            $select->columns(array('date', 'name', 'email', 'homepage', 'text', 'image', 'file'));
            $select->order($this->field.' '.$this->order);        
            });
            $resultSet->buffer();
            $resultSet->next();

            return $resultSet;
        }

在视图中:

 foreach($records as $record) : ?>
     <?php var_dump($record); ?> <br />
 <?php endforeach; ?>

我做错了什么?如何将$records作为数组?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

使用toArray方法从结果集中返回一个数组......

public function fetchAll($field, $order)
{
     // ...
     return $resultSet->toArray();
}

或者在您看来,使用foreach中的toArray方法

<?php foreach($records->toArray() as $record) : ?>
    <?php var_dump($record); ?> <br />
<?php endforeach;