我正在设置分页以在其帐户中显示属于该用户的图像列表。这就是我在我的控制器中所拥有的:
class UsersController extends AppController {
public $paginate = array(
'limit' => 5,
'order' => array(
'Image.uploaded' => 'DESC'
)
);
// ...
public function images() {
$this->set('title_for_layout', 'Your images');
$albums = $this->Album->find('all', array(
'conditions' => array('Album.user_id' => $this->Auth->user('id'))
));
$this->set('albums', $albums);
// Grab the users images
$options['userID'] = $this->Auth->user('id');
$images = $this->paginate('Image');
$this->set('images', $images);
}
// ...
}
它有效,但在我实现此分页之前,我在Image
模型中有一个自定义方法来抓取用户图像。这是:
public function getImages($options) {
$params = array('conditions' => array());
// Specific user
if (!empty($options['userID'])) {
array_push($params['conditions'], array('Image.user_id' => $options['userID']));
}
// Specific album
if (!empty($options['albumHash'])) {
array_push($params['conditions'], array('Album.hash' => $options['albumHash']));
}
// Order of images
$params['order'] = 'Image.uploaded DESC';
if (!empty($options['order'])) {
$params['order'] = $options['order'];
}
return $this->find('all', $params);
}
我有可能使用此getImages()
方法而非默认paginate()
吗?我在文档中最接近的是“自定义查询分页”,但我不想编写自己的查询,我只想使用getImages()
方法。希望我能做到。
干杯。
答案 0 :(得分:1)
是
//controller
$opts['userID'] = $this->Auth->user('id');
$opts['paginate'] = true;
$paginateOpts = $this->Image->getImages($opts);
$this->paginate = $paginateOpts;
$images = $this->paginate('Image');
//model
if(!empty($opts['paginate'])) {
return $params;
} else {
return $this->find('all', $params);
}
<强>解释强>
基本上,你只需添加另一个参数(我通常只称它为“paginate”),如果它在模型中是真的,而不是传回find的结果,你会传回动态创建的参数 - 然后你用于在控制器中执行分页。
这使您可以继续将所有模型/数据库逻辑保留在模型中,并在模型根据您发送的选项构建所有复杂参数后,利用控制器进行分页。