検索機能

ZF-Exでは検索条件についての設定をモデルクラス上で行えるようになっています。この項では検索条件の設定方法について説明します。

基本的な利用方法

modelの設定

検索条件を指定したいmodel中に、次のようにメンバ変数$_search_condを設定します。

protected $_search_cond = array(
                        array('key'  => 'field_1',
                              'name' => 'field_1',
                              'mode' => 'LIKE'
                        ),
                        array('key'  => 'field_2',
                              'name' => 'field_2',
                              'mode' => 'LIKE'
                        ),
                        array('key'  => 'date_from',
                              'name' => 'date',
                              'mode' => 'DATE_LARGER'
                        ),
                        array('key'  => 'date_to',
                              'name' => 'date',
                              'mode' => 'DATE_SMALLER'
                        ),
);

keyはPOSTにより送信されるパラメータのキー名、nameは検索を行う対象のフィールド名に対応します。modeは検索条件を示します。検索条件として指定可能なのは次のとおりです。

  • INT_SMALLER: 整数で、入力した項目より小さいこと
  • INT_LARGER: 整数で、入力した項目より大きいこと
  • DATE_SMALLER: 日付で、入力した項目より小さいこと
  • DATE_LARGER: 日付で、入力した項目より大きいこと
  • IN: 日付で、入力した項目より大きいこと
  • LIKE: 文字列が部分一致すること
  • EQUAL: 文字列が完全一致すること

モードが上記のいずれでもないとき、EQUALとして扱われます。

controllerの設定

controller中で次のように記述する事で、検索条件を作成できます。

$model = newAppModel();
$cond = $model->makeSearchCondition($this->_search_word);

メンバ変数$_search_wordはビューが正しく設定されていれば、appController::preDispatch()中で自動的に取得されます。

ここでは変数$condに検索条件をまとめるだけです。この後、$condを利用してページングを行うか、あるいはモデル上で新しいメソッドを作成して渡す必要があります。ぺージングについて詳しくはページング・ソーティング機能をご覧ください。

viewの設定

検索条件をコントローラに渡すには、ビューファイル上に次のように記述します。

<form action="<{$helper->url()}>/" method="POST">
    <input type="hidden" name="field_1" value="text" />
    <input type="hidden" name="field_2" value="text" />
    <input type="hidden" name="mode" value="search" />
    <input name="submit" type="submit" />
</form>

この時、POST送信であり、かつmode=searchをパラメータとして送信している必要があります

検索の情報保持について

検索条件はセッションで保存するようになっています。また、このセッション情報はコントローラ名が切り替わるまで保持し続けます。そのため、異なるコントローラの画面に遷移しなければ検索条件は保持され続けます。