在CakePHP 2中,如何告诉Paginator组件使用哪种模型?

时间:2018-09-28 04:40:51

标签: cakephp cakephp-2.0

给出以下工作示例,

// 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使用其他模型?就像我想在同一页面上分页用户模型一样,我将如何实现呢?

2 个答案:

答案 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模型。