2013-02-12 64 views
0

無論我做什麼我似乎無法使用DOB功能在我MY_Form_validation ......請注意_register_verify是我的用戶庫中,而不是一個控制器,所以我用$ CI,而不是$這...笨HMVC MY_Form_validation從庫

<?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不會被調用內部MY_Form_Validation.php的

回答

0

函數應該返回給測試的結果布爾值。

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."; 

最後,請在您的控制器中運行您的表單驗證,而不是庫或模型。有沒有需要調用get_instance()並分配到$ CI在這個用例。

+1

謝謝,我只是把驗證用戶庫裏面,以保持清潔控制器。我的問題是,出生日期不能作爲數組,例如「DOB []」不會工作,被傳遞,但如果我這樣做「DOB [日]」它的工作原理,這意味着我必須做的每一天,一個月一個,這一年不真正幫助...有沒有更好的方法來驗證DOB(檢查它是正確的日期,而不是實施例31年2月),而不使用JavaScript。 – 2013-02-12 18:15:42