フォームなどから取得したデータを検証します。コントローラにはバリデータが装備されていて、モデルとバリデータの連結によって非常に簡単にバリデートを行うことができます。バリデートを行うには以下の方法があります。
モデルと連携させて複数データを自動的に行う
データを個々に検証
モデルのvalidatefunc変数にバリデート関数を指定しておくことにより、モデルのvalidate関数で一括検証を行います。例えば以下のように宣言しておきます。
user.asp
Class User
Public parent
Public Sub Class_Initialize()
Set Me.parent = New Model
With Me.parent
.SetChild Me
.validatefunc.Add "name", "notempty"
.validatefunc.Add "email", "email"
.validatefunc.Add "age", "number"
End With
End Sub
End Class
キーにフィールド名、値にバリデータ関数を指定します。こうすることによってvalidate関数で自動的にそれぞれのバリデータ関数が呼ばれて検証を行います。バリデータ関数はフレームワークのvalidate.asp内の引数が(data, errmsg)になっているものです。必要であれば同じ形式で自由に追加して下さい。
次にモデルのバリデート関数を実行します。上記のモデルを使用した簡単なチュートリアルを記しますので参考にご覧下さい。
regist.html
<form method="post" action="regist.asp">
名前<br>
<input type="text" name="user/name"><br>
メールアドレス<br>
<input type="text" name="user/email"><br>
年齢<br>
<input type="text" name="user/age"><br>
</form>
regist.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
If c.post.Count > 0 Then
If c.m("user").validate(c.data("user")) Then
'検証成功
c.m("user").insert(c.data("user"))
Else
c.setv "err", "invalidte!"
End If
End If
End Function
%>
モデルのvalidatemsgを以下のように指定しておくことにより、validatem関数で検証+エラーメッセージも流してくれます。
例えばnameだけが引っかかった場合、”名前が入力されていません。<br>“という文字列が返され、名前と年齢が引っかかった場合は”名前が入力されていません。<br>年齢には数字を入れて下さい。<br>“という文字列が返されます。
user.asp
Class User
Public parent
Public Sub Class_Initialize()
Set Me.parent = New Model
With Me.parent
.SetChild Me
.validatefunc.Add "name", "notempty"
.validatefunc.Add "email", "email"
.validatefunc.Add "age", "number"
.validatemsg.Add "name", "名前が入力されていません。<br>"
.validatemsg.Add "email", "メールアドレスが正しくありません。<br>"
.validatemsg.Add "age", "年齢には数字を入れて下さい。<br>"
End With
End Sub
End Class
regist.asp
<!--#include file="./config.asp"-->
<!--#include file="../peetan/peetan.asp"-->
<%
Function action(ByRef c)
If c.post.Count > 0 Then
err = c.m("user").validatem(c.data("user"))
If err = "" Then
'検証成功
c.m("user").insert(c.data("user"))
Else
c.setv "err", err
End If
End If
End Function
%>
ちなみにvalidate関数を使用しても、validatemsgを設定しておけばGetValidateError関数でエラーメッセージを配列で取得できます。
c.m("user").validate(c.data("user"))
err = c.m("user").GetValidateError()
c.setv "nameerr", err("name")
コントローラにバリデータが装備されているので、そのバリデータ関数を直接呼びます。バリデータは以下のどちらかの変数として利用します。
c.validate.function()
c.v.function()
バリデート関数はnotempty(data, errmsg)のように引数に任意にエラーメッセージを設定できるようになっており、エラーメッセージが設定されていない場合は検証に成功するとTRUE、失敗すると FALSEが返されます。エラーメッセージが設定されている場合検証に成功すると空文字列、失敗するとエラーメッセージが返るようになっています。
エラーメッセージを設定しない時
If c.v.notempty(name, "") Then
c.setv "msg", "OK!"
Else
c.setv "msg", "Please input your name."
End If
エラーメッセージ設定時
err = ""
err = err & c.v.notempty(name, "Please input your name.")
err = err & c.v.email(email, "Please input right email.")
If err = "" Then
Regist(name, email)
End If
c.setv "msg", err
notempty(data, errmsg)
dataがemptyでないかを検証します。
length(data, min, max, errmsg)
文字列dataの長さがmin以上、max以下であるかを検証します。(validatefuncには指定できません。)
number(data, errmsg)
dataが数字であるかを検証します。
eisu(data, errmsg)
dataが英数字のみで形成されているかを検証します。
email(data, errmsg)
dataがメールアドレスの形式になっているかを検証します。