書き方っていうかどこに書くのかコントローラなのかモデルなのか。
業務のほうではモデルに書いてみましたがここではコントローラにそのまま書いた例を。
コードはこんなかんじです。
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 件のコメント:
コメントを投稿