モデルでの検索ロジックを維持し、まだコントローラにページ付けする1つの方法は、これを行うことです。
説明:
代わりのモデルから実際の結果を返し、任意の/すべてを返すオプションを探して、通常のように改ページします。いくつかの例では、以下のように単純すぎるように見えますが、find()
にはさらに多くのオプションを追加する余地があります。contain
、order
、group
、joins
、conditions
...などなどです。 「Fat Models、Skinny Controllers」のマントラを使用しています。
find()
にこのようなオプションを設定するといいです。サイト全体で簡単に再利用できるようになります。さまざまなオプションを渡すだけでよいのです。
コード:
/* CONTROLLER
*/
$opts = array('paginate' => true, 'limit'=>20);
$paginateOptions = $this->Event->getEvents($opts);
$this->paginate = $paginateOptions;
$data = $this->paginate('Event');
/* MODEL
*/
public function getProducts($opts = null) {
$params = array();
//limit
$params['limit'] = 50; //default
if(!empty($opts['limit'])) $params['limit'] = $opts['limit'];
//paginate option
$paginate = false;
if(isset($opts['paginate'])) {
if($opts['paginate']) $paginate = true;
}
//either return the options just created (paginate)
if($paginate) {
return $qOpts;
//or return the events data
} else {
$data = $this->find('all', $qOpts);
return $data;
}
}
あり、コードのこのビットスリム/以下の行を記述するための方法である - しかし、私はこのようにそれを書くようなので、それはすぐに理解できるのです。
(あなたの全体的な構造に何か問題があるように表示されません。)