ASPフレームワーク ぴいたん

バリデート

フォームなどから取得したデータを検証します。コントローラにはバリデータが装備されていて、モデルとバリデータの連結によって非常に簡単にバリデートを行うことができます。バリデートを行うには以下の方法があります。

  • モデルと連携させて複数データを自動的に行う
  • データを個々に検証


モデルと連携させてバリデート

モデルの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がメールアドレスの形式になっているかを検証します。

validate.txt · 最終更新: 2007/11/01 16:27 by opaken
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0