Php/fuelphp/validation/基本
提供: 初心者エンジニアの簡易メモ
サンプル
$val = Validation::forge('my_validate'); $val->add_field('app_name', 'AppName', 'required|max_length[63]'); // 必須で63文字まで $val->add_field('description', 'Description', 'max_length[255]'); // 任意で255文字まで $val->add_field('test_id', 'TestId', 'required|valid_string[numeric]'); // 必須で数字 $val->add_field('month', 'Month', 'required|valid_string[numeric]|numeric_min[1]|numeric_max[31]'); // 必須で1~31まで $val->add_field('month', 'Month', 'match_pattern[/[\w]+/]'); // 正規表現で文字のみ $val->add_field('ymd', 'Ymd', 'match_pattern[/[12][\d]{3}[01][\d][0123][\d]/]'); // 簡易yyyymmdd判定 if ($val->run()) // 正常 } else { // 異常 Session::set_flash('error', $val->error()); }
エラー表示
foreach ($val->error() as $error) { echo $error; }
コントローラーにValidate記述
public function action_index() { return Response::forge(View::forge('user/index')); } public function post_index() { $val = Validation::forge('user_validation'); $val->add_field('id', 'Id', 'required'); if ($val->run()) { $user = Model_User::forge(array( 'id' => Input::get('id'), 'name' => Input::get('name'), )); if ($user and $user->save()) { Session::set_flash('success', e('Added user #'.$user->id.'.')); Response::redirect('user'); } else { Session::set_flash('error', e('Could not save user.')); } } else { Session::set_flash('error', $val->error()); } return Response::forge(View::forge('user/index')); }
パスワードを以前入力したものと同じか確認するvalidation
パスワードをmatch_valueだけでチェックすると以前のパスワードがエラーメッセージに載るので、以下のようにエラーメッセージを上書きする
$val = Validation::forge('user_validation'); $val->add_field('name', '名前', 'required'); $val->add_field('email', 'Email', 'required|valid_email'); $rule_pass = 'required|min_length[4]|max_length[20]'; $user = \Model_User::findRowByEmail(Input::param('email')); if ($user) { $rule_pass .= '|match_value['.$user->pass.',1]'; } $val->add_field('pass', 'パスワード', $rule_pass); $val->set_message('match_value', '『:label』が以前登録されたもの違います');
注意:match_valueがpassフィールド以外にあるとそちらにも同じメッセージが反映されます。