書き方っていうかどこに書くのかコントローラなのかモデルなのか。
業務のほうではモデルに書いてみましたがここではコントローラにそのまま書いた例を。
コードはこんなかんじです。
public function action_create()
{
$auth = Auth::instance();
if (Input::method() == 'POST')
{
$val = Validation::forge();
$val->add('num', 'Number')
->add_rule('required')
->add_rule('valid_string', array('numeric'));
$val->add('name', 'Name')
->add_rule('required');
$val->add('login_id', 'LoginID')
->add_rule('required')
->add_rule('min_length', '4');
$val->add('password', 'Password')
->add_rule('required')
->add_rule('min_length', '6');
$val->add('password_conf', 'PasswordConf')
->add_rule('match_field', 'password');
if ($val->run())
{
// バリデーションOKの場合
$user = Model_User::forge(array(
'num' => $val->validated('num'),
'name' => $val->validated('name'),
'login_id' => $val->validated('login_id'),
'password' => $auth->hash_password($val->vaildated('password')),
));
if ($user->save())
{
Response::redirect('user');
}
}
else
{
// バリデーションNGの場合
Session::set_flash('error', $val->show_errors());
}
}
$this->template->title = '新規作成';
$this->template->content = View::forge('user/edit');
}
バリデーションの部分ですが Validation::forge() で返ってきたオブジェクトをもとにルールを追加していきます。
ここで使っているのは required(必須)、valid_string[numeric](数値チェック)、min_length(最小文字数)、match_field(指定したフィールドと合っているか)
$val->add や $val->add_field で一行で書いてしまうこともできますが、ルールが増えた場合見づらいのかなって思ってこの方法を選びました。
バリデーションの種類は他にもいろいろありますが、そこはマニュアルを参照してください。
http://docs.fuelphp.com/classes/validation/validation.html#rules
次に独自にバリデーションを作りたい場合ですね。
良い例が思いつかないのですが valid_string を使うことで数字や英字などのチェックをすることは可能です。しかしながらちょっと面倒だとかんじるひとやエラーメッセージで区別がつきづらいというひともいるのではないかと思います。
簡単な例ですが fuel/app/classes/myvalidation.php を作成します。
class MyValidation
{
// 数字チェック
public function _validation_valid_numeric($val)
{
return (preg_match('/^[0-9]+$/', $val) > 0);
}
// アルファベットチェック
public function _valition_valid_alpha($val)
{
return (preg_match('/^[a-zA-Z]+$/', $val) > 0);
}
}
メソッドの中身は大したことありません。メソッド名の先頭に _validation がつくくらいです。
これを実際に使う場合は
$val = Validation::forge();
$val->add_callable('MyValidation');
$val->add('num', 'Number')
->add_rule('required')
->add_rule('valid_numeric');
こんなかんじ。
add_callable で独自のバリデーションクラスを読み込ませ、あとは一緒です。
簡単ですね。
ぜひ試してみてください。
0 件のコメント:
コメントを投稿