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