在 CakePHP 2 中,您如何告诉分页器组件使用哪个模型?
In CakePHP 2, how do you tell the Paginator component which model to use?
给定以下工作示例,
// 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 在设置变量时使用哪个模型?目前这似乎是自动使用 Products 模型,但我不太明白为什么。选择与当前控制器同名的模型只是 CakePHP 魔法的一部分吗?如果是这样,我将如何告诉 Paginator 使用其他模型?就像如果我还想在同一页面上对用户模型进行分页,我将如何实现它?
因此,经过反复试验后,Paginator 似乎默认情况下只会使用通过命名约定与控制器关联的任何模型('User' 模型与 'UsersController'控制器等)。
$this->paginate()
的第一个参数将接受一个不同的模型,例如 $this->paginate('Dinglehopper')
,但是指定的模型需要在 controller/action 中可用为了让它工作。为此,您需要在调用 $this->paginate('Dinglehopper')
的操作中使用 $this->loadModel('Dinglehopper');
。
因此,在您想要在 'Products' 控制器中使用和分页模型 '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')
returns 分页的 Dinglehopper 模型。
根据 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
给定以下工作示例,
// 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 在设置变量时使用哪个模型?目前这似乎是自动使用 Products 模型,但我不太明白为什么。选择与当前控制器同名的模型只是 CakePHP 魔法的一部分吗?如果是这样,我将如何告诉 Paginator 使用其他模型?就像如果我还想在同一页面上对用户模型进行分页,我将如何实现它?
因此,经过反复试验后,Paginator 似乎默认情况下只会使用通过命名约定与控制器关联的任何模型('User' 模型与 'UsersController'控制器等)。
$this->paginate()
的第一个参数将接受一个不同的模型,例如 $this->paginate('Dinglehopper')
,但是指定的模型需要在 controller/action 中可用为了让它工作。为此,您需要在调用 $this->paginate('Dinglehopper')
的操作中使用 $this->loadModel('Dinglehopper');
。
因此,在您想要在 'Products' 控制器中使用和分页模型 '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')
returns 分页的 Dinglehopper 模型。
根据 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