0

何をしても、MY_Form_validationでdob関数を使用できないようです... _register_verifyはコントローラーではなくユーザーライブラリ内にあるため、$thisではなく$CIを使用していることに注意してください...

<?php
/** application/libraries/MY_Form_validation **/ 
class MY_Form_validation extends CI_Form_validation
{
    public $CI;
    function __construct( $config = array() )
    {
        parent::__construct($config);
        log_message('DEBUG', 'MY FORM VALIDATION Initialized!!');
    }

    // --------------------------------------------------------------------

    public function dob($dob)
    {
        $CI =& get_instance();
        $CI->form_validation->set_message('dob[]_check', 'Please enter a valid DOB');
        show_error('I AM AN ERROR');
    }

これは私のユーザーライブラリの関数です...

public function _register_verify($testmode = FALSE)
{
    if ($testmode) return TRUE;
    $CI =& get_instance();
    $CI->load->library('form_validation');
    $CI->form_validation->CI =& $CI;
    $CI->form_validation->set_rules('dob[]', 'DOB', 'trim|dob');
    if ($CI->form_validation->run() == FALSE)
    {
        // What to do if user details are NOT correct?
        $CI->session->set_flashdata('dob_error', form_error('dob[]'));
        return FALSE;
    } else {
        return TRUE;
    }
}

MY_Form_validationを拡張しようとしましたが、それでも機能しません。そして、私が見つけたほとんどのturotialsは、コントローラーからform_validationを呼び出します。

ログを確認しましたが、ログメッセージが表示されず、エラーは表示されません。

編集:クラスを初期化することができましたが、dobが呼び出されることはありません

4

1 に答える 1

0

MY_Form_Validation.php 内の関数は、テストの結果を示すブール値を返す必要があります。

public function dob($dob){
  //not perfect, but, returns true if date matches 12/10/1999 for example.
  return preg_match("/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/", $dob);
}

設定方法に応じて、コントローラーまたは構成ファイルのいずれかでルールとして dob を設定したことを確認してください。

$this->load->library('form_validation');
$this->form_validation->set_rules('dob', 'date of birth', 'required|dob');

エラーは で処理されapplication/language/english/form_validation_lang.phpます。追加:

$lang['dob'] = "Oops, wrong DOB format.";

最後に、ライブラリやモデルではなく、コントローラー内でフォームの検証を実行してください。このユース ケースでは、$CIを呼び出しget_instance()て割り当てる必要はありません。

于 2013-02-12T17:21:37.210 に答える