У меня есть массив простого объекта PHP, который я хочу использовать в сочетании с Zend_Paginator иpartaloop - PullRequest
0 голосов
/ 21 января 2012

Я реализую шаблон 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;

Ответы [ 2 ]

1 голос
/ 21 января 2012

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

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

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

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

хотя бы так, если ваши данные как-то неверны, вы должныподнять исключение.

0 голосов
/ 21 января 2012

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

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

  public function toArray()
  {
   return get_object_vars($this);
  }
  }
...