Как в CakePHP 2 сообщить компоненту Paginator, какую модель использовать? - PullRequest
0 голосов
/ 28 сентября 2018

Учитывая следующий рабочий пример,

// 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 использовать другую модель?Например, если бы я хотел также разбить модель User на той же странице, как бы я это реализовал?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Согласно 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'));

Ссылка: Пагинация

0 голосов
/ 28 сентября 2018

Таким образом, после некоторых проб и ошибок кажется, что по умолчанию Paginator просто использует любую модель, связанную с контроллером через соглашения об именах (модель «Пользователь» связана с контроллером «UsersController» и т. Д.),

Первый аргумент $this->paginate() примет другую модель, если вы хотите использовать ее, например, $this->paginate('Dinglehopper'), но указанная модель должна быть доступна для контроллера / действия, чтобы он работал,Для этого вам нужно $this->loadModel('Dinglehopper'); внутри действия, где вызывается $this->paginate('Dinglehopper').

Таким образом, в гипотетической ситуации, когда вы хотите использовать и разбивать на страницы модель «Dinglehopper» внутри вашего контроллера «Products», вы бы сделали,

// 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') возвращает разбитую на страницы модель Динглхоппера.

...