4.9.1 コントローラのセットアップ

The original text for this section has changed since it was translated. Please help resolve this difference. You can:

More information about translations

コントローラにおいてまずすべき事柄は、コントローラ変数 $paginate でページ付けの初期設定値を定義することです。そのとき、必ず並び替えを定義しなければならない点に注意してください。これは「order」をキーにして値を配列で渡すことで行います。

class RecipesController extends AppController {

    var $paginate = array(
        'limit' => 25,
        'order' => array(
            'Post.title' => 'asc'
        )
    );
}
  1. class RecipesController extends AppController {
  2. var $paginate = array(
  3. 'limit' => 25,
  4. 'order' => array(
  5. 'Post.title' => 'asc'
  6. )
  7. );
  8. }

fields のような他の find() のオプションも含めることができます。

class RecipesController extends AppController {

    var $paginate = array(
        'fields' => array('Post.id', 'Post.created'),
        'limit' => 25,        
        'order' => array(
            'Post.title' => 'asc'
        )
    );
}
  1. class RecipesController extends AppController {
  2. var $paginate = array(
  3. 'fields' => array('Post.id', 'Post.created'),
  4. 'limit' => 25,
  5. 'order' => array(
  6. 'Post.title' => 'asc'
  7. )
  8. );
  9. }

$paginate 配列に含まれる他のキーは conditionsfieldsorderlimitpagecontain そして recursive となり、「Model->find('all')」メソッドのパラメータに似ています。 似ているというより、実は各モデル名をキーにすることで、複数のモデルに対してページ付けの初期設定値を定義できるのです。

class RecipesController extends AppController {

    var $paginate = array(
        'Recipe' => array (...),
        'Author' => array (...)
    );
}
  1. class RecipesController extends AppController {
  2. var $paginate = array(
  3. 'Recipe' => array (...),
  4. 'Author' => array (...)
  5. );
  6. }

「Containable」ビヘイビアを使用した構文の例です:

class RecipesController extends AppController {

    var $paginate = array(
        'limit' => 25,
        'contain' => array('Article')
    );
}
  1. class RecipesController extends AppController {
  2. var $paginate = array(
  3. 'limit' => 25,
  4. 'contain' => array('Article')
  5. );
  6. }

$paginate 変数を定義すれば、コントローラのアクションの中で paginate() メソッドを呼び出すことができます。このメソッドはモデルから1ページ分の find() の結果を返し、ページ分けの統計情報を取得し、この統計情報を自動的にビューへ渡します。また、このメソッドは、ヘルパーのリストが PaginatorHelper に追加されていない場合、追加を実行します。

function list_recipes() {
    // findAll() に類似したデータを1ページ分取得する
    $data = $this->paginate('Recipe');
    $this->set('data', $data);
}
  1. function list_recipes() {
  2. // findAll() に類似したデータを1ページ分取得する
  3. $data = $this->paginate('Recipe');
  4. $this->set('data', $data);
  5. }

取得するレコードを絞るには、paginate() 関数の第2引数に検索条件を渡します。

$data = $this->paginate('Recipe', array('Recipe.title LIKE' => 'a%'));
  1. $data = $this->paginate('Recipe', array('Recipe.title LIKE' => 'a%'));
あるいは、 $paginate 配列の conditions キーに検索条件を指定します。