cakephp分页和瘦控制器

时间:2014-11-22 19:12:52

标签: php cakephp pagination cakephp-2.0

我正在使用cakephp(2.4.7)开发,我在组织我的控制器和模型以使用分页时遇到问题。

到目前为止,我把最多的逻辑放入模型中(瘦控制器,大模型)。在那里我将结果返回给控制器,在那里我设置变量以在视图上显示它。

但现在我想使用分页。这打破了我的概念,因为我不能在模型中使用分页。

什么是解决此问题的最佳解决方案?我不想重新组织我的整个结构,因为我需要在很多不同的动作和模型中进行分页。

例如:

控制器用户,动作朋友

public function friends($userid = null, $slug = null) {
    $this->layout = 'userprofile';      
    $this->User->id = $userid;
    if (!$this->User->exists()) {
        throw new NotFoundException(__('Invalid User'));
    }

    $this->set('friends', $this->User->getFriendsFrom($userid));
}

用户模型,函数getFriendsFrom($ user_from)..我需要在不同的操作中使用此方法。

public function getFriendsFrom($user_from) {

    $idToFind = $user_from;

    $data = $this->FriendFrom->find('all', 
        array(
            'conditions'=>array(
                'OR'=> array(
                    array('user_to'=> $idToFind),
                    array('user_from'=> $idToFind)
                ),
                'AND' => array(
                    'friendship_status' => 1
                )
            ),
            'contain' => array('UserFrom.Picture', 'UserTo.Picture')
        )
    );

    $friendslist = array();
    foreach ($data as $i) {
        if ($i['FriendFrom']['user_from'] == $idToFind){
            $friendslist[] = $i['UserTo'];
        }
        elseif ($i['FriendFrom']['user_to'] == $idToFind){
            $friendslist[] = $i['UserFrom'];
        }
    }

    return $friendslist;
}

设计这个概念以使用分页的最佳方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

控制器用户中的

使用cakephp Paginator

var $helpers = array('Paginator');

现在您调用以下方法

function index() {
    $result = array(
        'recursive' => -1,
        'conditions' => array(...),
        'contain' => array(...),
        'limit' => '2'
    );
    // you can write the above code in your model
    $this->paginate = $result; 
    $users = $this->paginate('User');

    // Re-arrage $users 

    $this->set(compact('users'));
}

如果有任何问题,请告诉我。