バリデート
フォームなどから取得したデータを検証します。コントローラにはバリデータが装備されていて、モデルとバリデータの連結によって非常に簡単にバリデートを行うことができます。バリデートを行うには以下の方法があります。
- モデルと連携させて複数データを自動的に行う
- データを個々に検証
モデルと連携させてバリデート
モデルの$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がメールアドレスの形式になっているかを検証します。
|