У меня есть массив простого PHP-объекта, который я хочу использовать вместе с Zend_Paginator и partialLoop.

Я реализую шаблон DAO в своем примере приложения, и у меня есть простой массив, содержащий пользователя (домен), полученный из UserMapper. Я хочу использовать Zend_Paginator с адаптером массива, но он не работает, он работает только тогда, когда я использую адаптер Zend_DbTable, который я не хочу делать, потому что это противоречит цели DAO.

пример кода ниже (не работает)

    $userMapper = new Application_Model_UserMapper();
    $users = $userMapper->getUsers();
    $paginator = Zend_Paginator::factory($users);
    $paginator->setCurrentPageNumber($this->_getParam('page'));
    $paginator->setItemCountPerPage(1);
    $this->view->paginator = $paginator;

пример кода ниже (рабочий)

    $users = new Application_Model_DbTable_User();
    $select = $users->fetchAll();
    $paginator = Zend_Paginator::factory($select);
    $paginator->setCurrentPageNumber($this->_getParam('page'));
    $paginator->setItemCountPerPage(1);
    $this->view->paginator = $paginator;

person Sharlon M. Balbalosa    schedule 21.01.2012    source источник
comment
Я не хочу вас оскорблять, но вы var_dumped ваши $users, чтобы проверить полученный вами массив?   -  person RockyFord    schedule 21.01.2012
comment
Разумеется, я проверил структуру массива с помощью Zend_Debug::dump, и все в порядке.   -  person Sharlon M. Balbalosa    schedule 21.01.2012
comment
Не работает в каком смысле? Никакие результаты не отображаются в сценарии просмотра? Неправильная нумерация страниц в сценарии просмотра? Вы вызываете управление разбиением на страницы стандартным способом <?= $this->pagination($this->paginationControl, 'Sliding', 'pagination.phtml') ?>   -  person David Weinraub    schedule 21.01.2012
comment
@DavidWeinraub Данные не отображаются, я передаю объект paginator в partialLoop, подобный этому $this->partialLoop('albums/partials/_user_table.phtml', $this->paginator), он работает, если я меняю адаптер.   -  person Sharlon M. Balbalosa    schedule 21.01.2012


Ответы (2)


Я смотрел на фабричный метод, и он принимает 3 параметра

public static function factory($data, $adapter = self::INTERNAL_ADAPTER,
                               array $prefixPaths = null)

вы можете попробовать

$paginator = Zend_Paginator::factory($users, 'Array');

по крайней мере, если ваши данные как-то неверны, вы должны создать исключение.

person RockyFord    schedule 21.01.2012

Я уже решил свою проблему, чтобы массив, содержащий простые объекты PHP, распознавался partialLoop, вам нужно реализовать метод toArray() в этом классе и вернуть пару значений ключа атрибутов

  class Application_Model_User
  {
  private $id;
  private $first_name;
  private $last_name;
  private $middle_name;

  public function toArray()
  {
   return get_object_vars($this);
  }
  }
person Sharlon M. Balbalosa    schedule 21.01.2012