1

フォームの複数のフィールドに同じコールバック関数を設定しています:

foreach($fields as $class => $i)
{
    ++$i;
    $validation->set_rules('car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
    $validation->set_rules('car_' . $i . '_twor', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
    $validation->set_rules('in_car_' . $i . '_one', $class, 'trim|xss_clean|callback_validate_car_fields[TRUE]');
    $validation->set_rules('in_car_' . $i . '_two', $class, 'trim|xss_clean|callback_validate_car_fields[FALSE]');
}

( classvariale はCarこの場合です)

コールバック関数は次のとおりです。

function validate_car_fields($input, $required)
{

    if ($required === "TRUE" && empty($input))
    {
        $this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
        return FALSE;
    }

    return TRUE;
}

そして、それは二重のエラーを示しています:

* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!
* Field Car can not be empty!

この場合の動作は理解できますが、フィールドごとに 4 つではなく、フィールド名ごとに 1 つのエラーのみを表示したいと考えています。これはどのように行うことができますか?

4

2 に答える 2

1

新しい機能を使用して編集または作成 (ネイティブ ライブラリの拡張)を検討します。libraries/MY_Form_validation.php

function remove_duplicate_errors() {

    $arr = array();
    foreach(array_keys($this->_error_array) as $h) {
        if (in_array($arr, $this->_error_array[$h]))
            unset($this->_error_array[$h]);
        else $arr[] = $this->_error_array[$h];
    }

}

$this->form_validation->remove_duplicate_errors();そして、作成後に呼び出すだけ$this->form_validation->run()です。これにより、文字列が同一であるすべてのケースが削除されます。ただし、これらの 4 つのうちどれが間違っているかを知ることが役立つ場合があるため、設計で別のアプローチを検討してください。

于 2012-11-08T10:04:04.950 に答える
1

これを試して

function validate_car_fields($input, $required)
{
    static $validation_failed_once = FALSE;

    if ($required === "TRUE" && empty($input))
    {
        // Return FALSE without setting error message from 2nd validation fail onwards
        if ($validation_failed_once) return FALSE;

        $this->form_validation->set_message('validate_car_fields', 'Field %s can not be empty!');
        // Set error message only for the first validation error
        $validation_failed_once = TRUE;
        return FALSE;
    }

    return TRUE;
}
于 2012-11-08T09:21:04.063 に答える