モジュールを作ろう!(9) 入力値の検査

本記事は、Cubson というモジュール生成ツールを使った XOOPS のモジュール作成方法を解説するものです。

対象は、XOOPS のモジュールを作ったことはないし、PHP もプログラミング自体もほとんど経験が無い、という人です。

モジュールを作ったりしていたのでだいぶん間が空きました。

今回は,フォームに入力した値のチェックについてです。フォームに入力された値が適切かどうかは,formsフォルダの中にある EditForm.class.php で行っています。例えば,必ず入力してもらわないといけない項目や,西暦なので4桁必須の項目に,適切な値が入っているか,といったことをチェックしています。

Cubson でコードを生成した場合,以下のような入力値チェックのコードが生成されます*1

  • 入力必須…全てのフィールドに設定される
  • 最大桁数…varchar型の場合,その桁数がセットされる

中には,任意入力にしたい項目もあるかも知れません。また,別のチェックを追加したいと考えるかも知れません。

そのような場合は,直接 EditForm.class.php を修正しても良いのですが,Cubson 的には,入力値チェック設定ファイル/.xml/xxx_edit.xml を修正し,再度 Cubson のコマンドで設定ファイルを元に EditForm.class.php を作り直す,というのが正しい(?)やり方になります。

/.xml/xxx_edit.xml を開くと,xml の形式でなにやらごちゃごちゃとあちこちにフィールド名が書かれていることが分かるでしょう。なんとな〜く見当が付く方もいらっしゃるかも知れませんが,入力値検査のルールを修正するには,"field" 要素の "depends" 属性の値を変えてやります。depends="required" とかなっている部分がそれです。

とりあえず,入力してもしなくても良い項目(任意入力項目)については,この "required" を削除してやります。ついでにその下にある,msg要素の行(key="const._MD_XXXXXX_ERROR_REQUIRED" となっている行)も削除してください。これは入力がなかったときに表示するメッセージですので,必須入力でなければ当然不要です。

本当は,depends に設定を追加することでいろいろ入力値チェックが出来るのですが,今回は設定できる値だけ紹介して,説明は省略します(長くなるので)。

  • required(必須)
  • minlength(最小桁数)
  • maxlength(最大桁数)
  • min(最小値)
  • max(最大値)
  • intrange(数値の範囲)
  • email(メールアドレス)
  • mask(正規表現
  • extension(ファイルの拡張子)
  • maxfilesize(最大ファイルサイズ)

さて,不要なチェックを外したら,cubson で以下のコマンドを実行します。これによって,/form/XxxEditForm.class.php が再作成されます(もしこのファイルを直接修正している場合は上書きされてしまいますので注意)。

makeform -l -u xx_edit

("xxx_edit" は先ほど修正したファイル名(拡張子不要)*2。xxx にはテーブル名が入ります)

"-l -u" は,EditForm.class.php に,load と update のファンクションを出力する,というオプションなのですが,とりあえず「付けるもの」と覚えておいてください。付けないとあとでエラーになります。

/forms/XxxEditForm.class.php を開いてみて,チェック不要なフィールドの行が

$this->mFieldProperties['bm_id']->setDependsByArray(Array());

のようになっていれば成功です。

$this->mFieldProperties['bm_id']->setDependsByArray(Array('required'));

のままであれば,上手くいっていません。

先日発売になった『XOOPS Cube Legacy デベロッパーズ・バイブル』(pp.164-)にも詳しく書かれていますので,参照ください。

*1:他にもあるかも

*2:すみません、最初拡張子付きで説明していました。実際には拡張子なしで指定します