1

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 つのコールバック関数を作成しました。これは、同じ外観の関数を繰り返さないようにするためです。これは、同じようにチェック/動作する必要があります... 残念ながら、各入力に対応するエラーにはアクセスできません。

4

1 に答える 1

1

変化する

$this->form_validation->set_message($field . '_min', sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field)));

$this->form_validation->set_message(_validate_rate, sprintf($this->lang->line('dev_s_invalid_rate'), strtolower($field)));

エラー メッセージは、フィールドではなく関数に対応しています。そうすれば、関数を複数のフィールドで一般的に使用できます。エラーメッセージに次のように書くことができます:

'The %s field is not correct'

フィールド名を %s に挿入します

于 2012-05-06T07:22:28.517 に答える