给出以下工作示例,
// ProductsController.php
<?php
App::uses('AppController', 'Controller');
class ProductsController extends AppController {
public $helpers = array('Html', 'Form');
public $components = array('Session', 'Paginator');
public $paginate = array(
'limit' => 5
);
public function index() {
$this->Product->recursive = -1;
$this->set('products', $this->paginate());
}
}
?>
什么让Paginator设置变量时使用哪种模型?当前,这似乎是自动使用产品模型来实现的,但是我真的不明白为什么。选择与当前控制器同名的模型仅仅是CakePHP的魔术的一部分?如果是这样,我将如何告诉Paginator使用其他模型?就像我想在同一页面上分页用户模型一样,我将如何实现呢?
答案 0 :(得分:1)
根据Cakephp2, 默认情况下,$ this-> paginate()可在当前模型上使用。
如果要在同一页面上使用其他模型,可以这样做:
$this->paginate('User');
您都可以传递其他参数,例如:
$this->Paginator->settings = array(
'fields' => array('User.*'),
'order' => array('User.username' => 'asc'),
'limit' => 10,
);
$this->set('users', $this->paginate('User'));
参考:Pagination
答案 1 :(得分:0)
因此,经过反复试验,默认情况下,Paginator似乎只会使用通过命名约定与控制器相关联的任何模型(“用户”模型与“ UsersController”控制器相关联,依此类推) 。
如果要使用$this->paginate()
的第一个参数,例如$this->paginate('Dinglehopper')
,它将接受不同的模型,但是指定的模型需要控制器/动作使用,以便于工作。为此,您需要在调用$this->loadModel('Dinglehopper');
的操作中使用$this->paginate('Dinglehopper')
。
因此,在假设的情况下,您想在“产品”控制器中使用模型“ Dinglehopper”并对其进行分页,
// ProductsController.php
<?php
App::uses('AppController', 'Controller');
class ProductsController extends AppController {
public $helpers = array('Html', 'Form');
public $components = array('Session', 'Paginator');
public $paginate = array(
'limit' => 5
);
public function index() {
$this->loadModel('Dinglehopper');
$this->Product->recursive = -1;
$this->set('dinglehoppers', $this->paginate('Dinglehopper'));
}
}
?>
$this->loadModel('Dinglehopper');
使模型“ Dinglehopper”可用于操作,然后$this->paginate('Dinglehopper')
返回分页的Dinglehopper模型。