CodeIgniterのバリデーションルールで他のPOST値を参照する
CodeIgniterのset_rulesは便利ですが、このような形
<input type="number" name="year">
<input type="number" name="month">
<input type="number" name="day">
の入力項目があった場合、set_rulesは基本的に単一のPOST値に対してのバリデーションなので
例えば存在しない日付を入力していないかのチェックは難しいかと思います
(配列のnameにすればいけないこともないですが、、)
その場合はset_rulesで第二引数を利用して、他のPOST値のnameを橋渡しします。
やり方
第二引数を利用する場合は、ルール名の後に[]を記述し、そこに引数の中身をいれてください
第三引数は設定できませんので、今回はカンマ区切りで疑似的な配列指定をします
$this->form_validation->set_rules('year', '年', 'required|trim|numeric|callback_check_date[month,day]');
$this->form_validation->set_rules('month', '月', 'required|trim|numeric');
$this->form_validation->set_rules('day', '日', 'required|trim|numeric');
コールバック関数の中身はこちらになります。
// MNPの有効期限チェック
function check_date ( $year, $params ) {
// 月と日のnameが入っている
@list($month_key, $day_key) = explode(',', $params);
// 月の日のデータ
@list($month, $day) = [$this->input->post($month_key) ?? '', $this->input->post($day_key) ?? ''];
// 空白もしくは入力なしの場合、チェックをスルー
if( count( array_filter([$year, $month, $day], function ($val) { return empty($val); }) ) != 0 ) {
return true;
}
// 日付形式が間違っている
if(!@checkdate($month, $day, $year)) {
$this->set_message('check_date', '日付の形式が間違っています');
return false;
}
return true;
}
第二引数でrurlesで指定したmonthとdayのname名を受け取り
POSTの中身を確認。記載されていれば日付チェックを行う形になります。
今回はnameの名前でしたが、変数の値などを引数にいれてチェックなどもできますので
callback内でDBを参照して、入力値の何かしらをチェックなども行えそうです。
Author And Source
この問題について(CodeIgniterのバリデーションルールで他のPOST値を参照する), 我々は、より多くの情報をここで見つけました https://qiita.com/karitorumono333/items/254a5319b26f68c7147c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .