SourceForge.jp

バリデート

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

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

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

  モデルの$validatefunc変数にバリデート関数を指定しておくことにより、モデルのvalidate関数で一括検証を行います。例えば以下のように宣言しておきます。

user.php
<?php
class CUser extends CModel
{
    var $validatefunc = array( "name" => "notempty",
                           "email" => "email",
                           "age" => array("notempty","number") );
}
?>

キーにフィールド名、値にバリデータ関数を指定します。こうすることによってvalidate関数で自動的にそれぞれのバリデータ関数が呼ばれて検証を行います。バリデータ関数はフレームワークのvalidate.php内の引数が( $data, $errmsg = "" )になっているものです。必要であれば同じ形式で自由に追加して下さい。バリデータ関数を配列で指定すると、複数のバリデートを順に行うことが出来ます。

次にモデルのバリデート関数を実行します。上記のモデルを使用した簡単なチュートリアルを記しますので参考にご覧下さい。

regist.html
<form method="post" action="regist.php">
名前<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.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );


function action( &$c )
{
    if( count( $_POST ) )
    {
        if( $c->ic_user->validate( $c->data["user"] ) )
        {
            //検証成功
            $c->ic_user->insert( $c->data["user"] );
        }
        else
        {
            $c->set( "err", "invalidte!" );
        }
    }
}
?>

  モデルの$validatemsgを以下のように指定しておくことにより、validatemsg関数で検証+エラーメッセージも流してくれます。

  例えばnameだけが引っかかった場合、"名前が入力されていません。<br>"という文字列が返され、名前と年齢が引っかかった場合は"名前が入力されていません。<br>年齢を入力して下さい<br>"という文字列が返されます。

user.php
<?php
class CUser extends CModel
{
    var $validatefunc = array( "name" => "notempty",
                           "email" => "email",
                           "age" => array("notempty","number") );

    var $validatemsg  = array( "name" => "名前が入力されていません。<br>",
                           "email" => "メールアドレスが正しくありません。<br>",
                           "age" => array(
                                "年齢を入力して下さい。<br>",
                                "年齢には数字を入れて下さい。<br>") );
?>
regist.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );


function action( &$c )
{
    if( count( $_POST ) )
    {
        $err = $c->ic_user->validatemsg( $c->data["user"] );
        if( $err == "" )
        {
            //検証成功
            $c->ic_user->insert( $c->data["user"] );
        }
        else
        {
            $c->set( "err", $err );
        }
    }
}
?>

ちなみにvalidate関数を使用しても、$validatemsgを設定しておけばGetValidateError関数でエラーメッセージを配列で取得できます。

$c->ic_user->validate( $c->data["user"] );
$err = $c->ic_user->GetValidateError();
$c->set( "nameerror", $err["name"] );

データを個々に検証

  コントローラにバリデータが装備されているので、そのバリデータ関数を直接呼びます。バリデータは以下のどちらかの変数として利用します。

$c->validate->function();
$c->v->function();

バリデート関数はnotempty( $data, $errmsg = "" )のように引数に任意にエラーメッセージを設定できるようになっており、エラーメッセージが設定されていない場合は検証に成功するとTRUE,失敗するとFALSEが返されます。エラーメッセージが設定されている場合検証に成功すると空文字列、失敗するとエラーメッセージが返るようになっています。

エラーメッセージを設定しない時
if( $c->v->notempty( $name ) )
{
    $c->set( "msg", "OK!" );
}
else
{
    $c->set( "msg", "Please input your name." );
}
エラーメッセージ設定時
$err = "";
$err .= $c->v->notempty( $name, "Please input your name." );
$err .= $c->v->email( $email, "Please input right email." );
if( $err == "" )
{
    Regist( $name, $email )
}
$c->set( $err );

関数

  • mixed notempty( mixed data [, string errmsg ] )

dataがemptyでないかを検証します。



  • mixed len( string data, int min, int max [, string errmsg ] )

文字列dataの長さがmin以上、max以下であるかを検証します。(validatefuncには指定できません。)



  • mixed number( mixed data [, string errmsg ] )

dataが数字であるかを検証します。



  • mixed eisu( string data [, string errmsg ] )

dataが英数字のみで形成されているかを検証します。



  • mixed email( string data [, string errmsg ] )

dataがメールアドレスの形式になっているかを検証します。