検索のメールバリデーションを外した(cakephp2)

投稿者: | 2022年8月14日

メンテナンス作業をしているcakephp2のシステムについて、「検索のメールバリデーションを外してほしい」という依頼があり、その対応を進めていた。

で、どうやら検索は、cakeにて利用できるSearch Pluginというものがあり、それを使っているということが分かったので、その周りの設定値を修正することでできそうな気がした。

調べてみたら、以下の設定値っぽいものがあった。

  • $filterArgs → 検索を行うテーブルのModelに記載されていた。
  • $presetVars → 検索処理を行うControllerに記載されていた。

それぞれで、どういう設定を行っているのか調べる。

ただ、正直完璧にわかったわけではなく、現状の仕事にて状況が分かるレベルまで調査した。

ページコンテンツ

そもそもSearch Pluginとは?

Cake Development Corporationなる組織(多分cakeを作った人たちかな?)にて検索機能のために作られたcake用のプラグインなのだと思われる。名前から想像できるけど。

Cake Development Corporationについて調べてみたけど、CakePHPを作ったLarry Masters氏によって作られた会社で、ソフトウェア開発やコンサルティングをやっているとのこと。

Cake Development CorporationのLinkedInのページ

$filterArgsについて

検索条件を設定している。ざっと以下のような感じとのこと。

  • 検索を行うModel(検索したいテーブル)にて定義する。
  • 検索対象のフィールドについて、配列にて定義する。nameごとにfield,type,method,emptyを設定する。
    • name: $dataに格納されている名前(フォームのnameかな?)。後述のfieldと同じなら省略できる。
    • field: 検索条件を適用するテーブルのfield。配列で複数指定すれば、受け取った値をそれぞれのfiledにて検索する。
    • type: 検索時のマッチング方法。like(部分一致)、value(完全一致)、expression(範囲などの条件式)、subquery(値のリスト)、query(複数条件を組み合わせたりいろいろできる)を指定する。
    • method: 戻り値を検索条件として利用する関数名を指定できる。
    • empty(allowempty): 空を許可するかどうか指定。true or false。
ex)
        public $filterArgs = array(
            'id'=>array(
                'type'=>'value',
                'field'=>'User.id'
            ),
            'email'=>array(
                'type'=>'like',
                'field'=>'User.email'
            ),
            'username'=>array(
                'type'=>'like',
                'field'=>'User.nickname'
            ),
            'gender'=>array(
                'type'=>'value',
                'field'=>'User.gender'
            )
            'status'=>array(
                'type'=>'value',
                'field'=>'User.status'
            )
        );

$presetVarsについて

このプラグインは、最終的にgetのパラメータを参照して検索処理を行うが、検索フォームに入力した値を受け取って、それをgetのパラメータに変換するための設定がこれらしい。

「true」だけを指定しててもいいみたいだが、凝った検索条件にすると、値をそのままパラメータ化してもうまく動かないため、この変数でいろいろ設定してやるみたい。

設定項目は$filterArgsと同じような感じだが、以下の設定値を指定できるみたい。

  • name: 上と同じ
  • field: 上と同じ
  • type: 意味合いは上と同じだが、設定値は下の3つ。
    • value: 普通、これを記載すればいいみたい。
    • checkbox: フォーム項目がcheckboxの場合に指定する。複数項目チェックとかに対応しているらしい。
    • lookup: フォーム項目にオートコンプリートルックアップを使った場合、指定してやる必要があるらしい。
  • model: このフィールドで使われているモデルを指定する。モデルをまたぐ場合は使うのかも?
  • formField: よくわからない。説明文には「フォーム内のフィールドで、model.filedを設定する」とある。modelFieldとの違いは?
  • modelField: よくわからない。説明文には「ビューにて設定するフィールド名として設定する」とある。
  • encode: %など、URLのパスとして使ったらまずい値が与えられるときに設定しておく。
  • empty: 上と同じ。

ex)
        public $presetVars = array(
            array('field' => 'id', 'type' => 'value','empty' => true),
            array('field' => 'email', 'type' => 'value','empty' => true),
            array('field' => 'username', 'type' => 'value','empty' => true),
            array('field' => 'gender', 'type' => 'value','empty' => true)
            array('field' => 'status', 'type' => 'value','empty' => false)
        );

最後に

検索を便利にするのは非常に有用で、上の設定値を使うことで検索にバリエーションを持たせることができるのだと思った。

もっといろんな検索をやりたくなったら、再度調査して、ここに追記する予定。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)