我有一些普通的PHP对象,我想与Zend_Paginator和partialLoop一起使用

时间:2012-01-21 08:45:06

标签: zend-framework model zend-framework-mvc zend-paginator

我正在我的示例应用程序中实现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 个答案:

答案 0 :(得分:1)

我正在查看工厂方法,它需要3个参数

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

您可能想尝试

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

至少这种方式如果你的数据在某种程度上是不正确的,你应该引发异常。

答案 1 :(得分:0)

我已经解决了我的问题,为了让partialLoop能够识别包含普通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);
  }
  }