目次

フォーム値の自動検証を行う(カスタムチェック編)

フォーム値の自動検証を行う(カスタムチェック編)

当然ですが、値の最小値や最大値、正規表現だけで全ての入力をチェックできるケースばかりとは限りません。アプリケーションによって、数々のパターンの入力チェックが必要になることと思います。

カスタムチェックの利用方法

この場合、アプリケーション固有のメソッドでチェックを行うことも可能で、具体的な手順は以下のようになります。

  1. フォーム値の'custom'属性にメソッド名を記述する
  2. 1.で指定したメソッドをアクションフォームクラスに定義する

1.については簡単で:

/**
 * @access private
 * @var array フォーム値定義
 */
var $form = array(
    'sample' => array(
        'name' => 'サンプル',
        'required' => true,
        'custom' => 'checkSample',
        'type' => VAR_TYPE_STRING,
    ),
);

のように'custom' => 'メソッド名'とするだけです。次に、同じくアクションフォームにcheckSampleという名前でメソッドを定義します。

/**
 * チェックメソッド: サンプル
 *
 * @access public
 * @param string $name フォーム項目名
 */
function checkSample($name)
{
    if (strtotime($this->form_vars[$name]) > time()) {
        $this->ae->add($name, "{form}には未来の時間を入力してください", E_FORM_INVALIDVALUE);
    }
}

以下に、チェックメソッドについて順に解説していきます。

カスタムチェックメソッドの引数

カスタムチェックメソッドは1つの引数$nameを取ります。ここにはチェックすべきフォーム名が指定されます。ですので、チェックすべきフォーム値には

$this->form_vars[$name]

でアクセスできるということになります。

カスタムチェックメソッドのエラー処理

フォーム値を検証して、エラーが発生した場合にはアクションエラーオブジェクトを利用してエラーを追加します。具体的には、上記の例の通り

$this->ae->add([フォーム名], [エラーメッセージ], [エラーコード]);

となります。フォーム名には迷わず$nameを指定して問題ありません。また、エラーコードは以下のいずれか、あるいはアプリケーション定義の任意のエラーコードを指定することが出来ますが、通常はE_FORM_INVALIDVALUEあるいはE_FORM_INVALIDCHARで問題ありません。

最後に、エラーメッセージにはユーザ向けに表示したいエラーメッセージを指定します。なお、ここで「{form}」と記述するとフォーム表示名に置換されます。

なお、Ethna_ActionFormには予め以下のようなカスタムメソッドが定義されています。

例えばメールアドレスのチェックを行うには

'custom' => 'checkMailaddress',

と指定します。