EC-CUBE:SC_FormParamクラスによるパラメーターチェック方法
今お仕事で関わっているEC-CUBEですが、ネット上にはまだまだ情報が少ないです。
例えばプラグイン作成でオリジナルフォームを作っても、SC_FormParamクラスを使って、どうやってチェックしたらいいのか調べてもなかなか出て来ません。
そこで私が独自で調べた中から、少しづつ情報提供していきたいと思います。
※:EC-CUBEのバージョンは2.12.2のものをベースにしています。
SC_FormParamの基本的な使い方
SC_FormParamクラスを使うには、拡張先であるSC_FormParam_Exクラスをインスタンス化して利用します。 ここではPOSTされたデータを設定してみましょう。
$objFormParam = new SC_FormParam_Ex(); $objFormParam->setParam($_POST);
次に、内容の検証ルールを追加します。
ここでは例として名前(性、名)とメールアドレスを必須入力にし、メールアドレスはちゃんとした形式になっているもののみ受け入れるようにしてみます。
$objFormParam->addParam('姓', 'sei', '', '', array('EXIST_CHECK','NO_SPTAB')); $objFormParam->addParam('名', 'mei', '', '', array('EXIST_CHECK','NO_SPTAB')); $objFormParam->addParam('メールアドレス', 'email', '', '', array('EMAIL_CHECK'));
後半に挙げる「オプション」が必要な検証ルールについては、次のようにaddParam()の3番目の引数に設定します。
//姓を3文字以内にしたい場合 $objFormParam->addParam('姓, 'sei', 3, '', array('MAX_LENGTH_CHECK'));
そして最後に検証作業。
エラーがあると$arrErr変数にエラーが配列で格納されます。
$arrErr = $objFormParam->checkError();
検証ルールの最後のパラメーターにある配列型の文字のところがポイントなんですけど、ここに様々なルールを追加していくことでいろんな検証ルールを作ることができます。 以下に検証ルール一覧を載せてみたので実際に組み合わせて試してみてください。
$objFormParam->addParam()の4番目の引数は入力値をmb_convert_kana()で変換するための変換オプション文字列を指定します。 変換オプションを指定した場合は、checkError()を実行する前に「$objFormParam->convParam()」を実行する必要があるので注意してください。
SC_FormParam検証ルール一覧
チェック項目 | 定数名 | オプション | エラー条件 |
---|---|---|---|
必須入力の判定 | EXIST_CHECK | 値の受け取りがない場合エラーを返す | |
数字の判定 | NUM_CHECK | 入力文字が数字以外ならエラーを返す | |
メールアドレス形式の判定 | EMAIL_CHECK | メールアドレス形式でないならエラーを返す | |
メールアドレスに使用できる文字の判定 | EMAIL_CHAR_CHECK | メールアドレスに使用できない文字が含まれていたらエラーを返す | |
携帯メールアドレスの判定 | MOBILE_EMAIL_CHECK | SC_Helper_Mobile_Ex::gfIsMobileMailAddress()による判定結果でエラーを返す | |
英字の判定 | ALPHA_CHECK | 入力文字が半角英字以外ならエラーを返す | |
英数字の判定 | ALNUM_CHECK | 入力文字が英数字以外ならエラーを返す | |
英数記号の判定 | GRAPH_CHECK | 入力文字が英数記号以外ならエラーを返す | |
カタカナの判定 | KANA_CHECK | 入力文字がカナ以外ならエラーを返す | |
カタカナの判定2 | KANABLANK_CHECK | 入力文字がカナ以外ならエラーを返す (タブ、スペースは許可する) | |
URL形式の判定 | URL_CHECK | URLを正規表現で判定する。デフォルトでhttp://があってもOK | |
IPアドレスの判定 | IP_CHECK | IPアドレスでない場合エラーを返す。改行コードが含まれている場合には配列に変換 | |
ドメインチェック | DOMAIN_CHECK | ドメインの形式が正しくなければエラーを返す | |
スペース、タブのみの判定 | SPTAB_CHECK | スペース、タブ、改行のみの入力の場合エラーを返す | |
スペース、タブの判定 | NO_SPTAB | 入力文字がスペース、タブ、改行を含んでいたらエラーを返す | |
数字(非ゼロ)の判定 | ZERO_CHECK | 数値入力値で0が入力された場合エラーを返す | |
ゼロで開始されている数値の判定 | ZERO_START | 0で始まる数値が入力されていたらエラーを返す | |
ファイルの存在チェック | FILE_EXISTS | 入力パスのファイルが見つからなければエラーを返す | |
ディレクトリ内のファイル存在チェック | FIND_FILE | ディレクトリ | 指定ディレクトリ内に入力パスのファイルが見つからなければエラーを返す(デフォルトでIMAGE_SAVE_REALDIR) |
ディレクトリ存在チェック | DIR_CHECK | 入力されたパス文字のディレクトリが見つからなければエラーを返す | |
ファイル名の判定 | FILE_NAME_CHECK | 入力文字が英数字,’_’,’-‘以外ならエラーを返す | |
ファイル名の判定(アップロード以外の時) | FILE_NAME_CHECK_BY_NOUPLOAD | 入力文字が英数字,’_’,’-‘以外ならエラーを返す | |
最大文字数制限の判定 | MAX_LENGTH_CHECK | 最大文字数 | 入力が指定文字数より大きいならエラーを返す |
最小文字数制限の判定 | MIN_LENGTH_CHECK | 最小文字数 | 入力が指定文字数未満ならエラーを返す |
桁数の判定 | NUM_COUNT_CHECK | 桁数 | 入力文字の桁数が指定の桁数でなければエラーを返す |
必須選択の判定 | SELECT_CHECK | プルダウンなどで選択されていない場合エラーを返す | |
小文字に変換 | CHANGE_LOWER | 入力文字を小文字に変換する | |
ダウンロード用ファイルの存在チェック | DOWN_FILE_EXISTS | DOWN_SAVE_REALDIR内に入力パスのファイルが見つからなければエラーを返す |
お役に立てば幸いです。
まだEC-CUBEの構造がよく分からない人は以下のような書籍で学習してみてください。
2012-12-19