「Php/fuelphp/validation/基本」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→パスワードを以前入力したものと同じか確認するvalidation) |
|||
(同じ利用者による、間の2版が非表示) | |||
行44: | 行44: | ||
} | } | ||
− | == | + | ==パスワードを以前入力したものと同じか確認するvalidation== |
パスワードをmatch_valueだけでチェックすると以前のパスワードがエラーメッセージに載るので、以下のようにエラーメッセージを上書きする | パスワードをmatch_valueだけでチェックすると以前のパスワードがエラーメッセージに載るので、以下のようにエラーメッセージを上書きする | ||
$val = Validation::forge('user_validation'); | $val = Validation::forge('user_validation'); | ||
行50: | 行50: | ||
$val->add_field('email', 'Email', 'required|valid_email'); | $val->add_field('email', 'Email', 'required|valid_email'); | ||
$rule_pass = 'required|min_length[4]|max_length[20]'; | $rule_pass = 'required|min_length[4]|max_length[20]'; | ||
− | $user = \Model_User:: | + | $user = \Model_User::findRowByEmail(Input::param('email')); |
if ($user) { | if ($user) { | ||
$rule_pass .= '|match_value['.$user->pass.',1]'; | $rule_pass .= '|match_value['.$user->pass.',1]'; | ||
行57: | 行57: | ||
$val->set_message('match_value', '『:label』が以前登録されたもの違います'); | $val->set_message('match_value', '『:label』が以前登録されたもの違います'); | ||
− | + | 注意:match_valueがpassフィールド以外にあるとそちらにも同じメッセージが反映されます。 | |
==公式サイト== | ==公式サイト== | ||
http://fuelphp.com/docs/classes/validation/validation.html | http://fuelphp.com/docs/classes/validation/validation.html |
2016年2月8日 (月) 06:48時点における最新版
サンプル
$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フィールド以外にあるとそちらにも同じメッセージが反映されます。