foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

CakePHP で GET フォームを作る入門

ビューへ GET を設定する

<?php echo $form->create('ModelName', array(
    'type' => 'GET', 'action' => 'mobile_index')); ?> 

モデルの検索項目は別フィールドを用意してバリデーションを緩くする

<?php
class ModelName extends AppModel{
    var $order = 'ModelName.id';
    
    var $validate = array(
        'field_name' => array(
            // 登録項目のバリデーション。
        ),
        'condition_field_name' => array(
            // 検索項目のバリデーション。
        ),
    );
}
?>

コントローラの submit 判定

GET 時の submit 判定は if(empty($this->data)){ でできないので注意。

<?php
class SomeController extends AppController {
    function index(){
        if(empty($this->data)){  // この方法はダメ。
            return;
        }
    }
}
?>

GET 時の submit 判定は if(! isset($this->params['url']['param_name'])){ で行う。

<?php
class SomeController extends AppController {
    function index(){
        if(! isset($this->params['url']['condition_field_name'])){
            return;
        }
    }
}
?>

コントローラの submit 後の再表示

画面項目を再表示するため、$this->data['ModelName']['param_name'] を設定しておく。

<?php
class SomeController extends AppController {
    function index(){
        if(! isset($this->params['url']['condition_field_name'])){
            return;
        }
        
        $this->data['ModelName']['condition_field_name'] =
            $this->params['url']['condition_field_name'];
        
        $models = $this->ModelName->find('all');
    }
}
?>