CodeIgniter のフォーム検証コールバック関数を使用しています。
function _validate_rate($input, $field)
{
if ( !in_array($field, array("water", "earth", "fire")) )
{
return FALSE;
}
$min = (int) $this->input->post($field . '_max');
if ( $min > 0 AND $min < $input )
{
$this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field)));
return FALSE;
}
return TRUE;
}
.. 3 つのフォーム入力に上記の関数を使用しています。
$form_rules = array(
'water_min' => array (
'field' => substr($this->lang->line('dev_field_water'), 0, -1),
'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[water]'
),
'earth_min' => array (
'field' => substr($this->lang->line('dev_field_earth'), 0, -1),
'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[earth]'
),
'fire_min' => array (
'field' => substr($this->lang->line('dev_field_fire'), 0, -1),
'rules' => 'trim|xss_clean|max_length[4]|numeric|callback__validate_rate[fire]'
)
);
foreach( $form_rules as $input => $data)
{
$this->form_validation->set_rules($input, $data['field'], $data['rules']);
}
次のステートメントでフォーム検証エラーメッセージを表示したい場合、問題が発生します。
$this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field)));
(コールバック関数内)。
$field
そのため、データに対応するエラーメッセージを設定する必要があるため、$field
がの場合water
、エラーメッセージを設定する必要がありますwater_min
(検証ルールフィールド名であるため)。しかし、次のメッセージが表示されます:
Unable to access an error message corresponding to your field name.
.
3 つのフィールドに対して 1 つのコールバック関数を作成しました。これは、同じ外観の関数を繰り返さないようにするためです。これは、同じようにチェック/動作する必要があります... 残念ながら、各入力に対応するエラーにはアクセスできません。