1

Ошибка: элементы paginator - это объекты (а не массивы). var_dump($records):Zend Paginator + Table Gateway: ошибка

object(Records\Model\Records)#240 (11) { ["id"]=> NULL ["name"]=> string(9) "5453gdfgd" ["email"]=> string(16) "[email protected]" ["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) "[email protected]" ["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 как массив?

Спасибо заранее!

ответ

0

Либо возвращает массив из результирующего набора, используя свой метод toArray ...

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

Или, по вашему мнению, используйте метод toArray в вашем Еогеасп

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

Дополнительная информация: Zend \ Db \ ResultSet \ Exception \ RuntimeException Файл: /opt/lampp/htdocs/guest-book/vendor/zendframework/zendframework/library/Z end/Db/ResultSet/AbstractResultSet.php: 265 Сообщение: Строки как часть этого источника данных, с объектом типа нельзя передать в массив – Igor

+0

Ah. У вашей модели есть метод getArrayCopy()? 'public function getArrayCopy() { return get_object_vars ($ this); } ' – Crisp

+0

Да, у него есть ..... – Igor

Смежные вопросы