簡體   English   中英

Codeigniter - 表單驗證回調順序

[英]Codeigniter - form validation callback order

希望是一個簡單的。 我有以下表單驗證規則:

    $this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime');
    $this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder');
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval');

$this->input->post('timeStart')的問題是callback_valid_interval要求設置$this->input->post('timeStart')$this->input->post('timeEnd') 目前我的callback_valid_interval函數錯誤,如果用戶尚未完成timeStart或timeEnd。

有什么方法可以設置規則之間的依賴關系,即如果其他規則沒有通過,不要運行callback_valid_interval

或者我可以對這些字段進行手動檢查,但是想知道是否有更好的方法可以做到這一點?

最好的問候,本。

在Codeigniter中,規則從左向右運行,一旦失敗,它就會停止檢查並將該字段標記為“未通過驗證”,並將該消息設置為第一個失敗的規則。

您可以根據需要擁有所有3個字段,因此至少您必須在所有3個字段中都有所需。 每個字段都是獨立檢查的,因此不能(使用內置的form_validation類)創建比具有獨立規則的每個字段更復雜的邏輯檢查。

不幸的是,除了matches[]規則之外,Codeigniter的表單驗證類中沒有任何內容允許你這樣做......

由於CI_Form_validation::set_rules不返回任何內容,因此不能在if子句中使用它。 我建議您只檢查是否設置了值。

運行第三個規則回調時,它們不會被驗證,所以它們可以是任何東西:在callback_valid_interval進行一些檢查。

像這樣的東西:

$this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime');
$this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder');
if ($this->input->post('timeStart') && $this->input->post('timeEnd')){
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval');
}

使用if(true和true)方法可以實現所需的功能,但是我想確保您知道它的功能。 set_rules不評估規則,只有run函數才能評估規則。 jfoucher的代碼所做的是獲取帖子值,如果它們都沒有設置,那么它將創建另一個規則。 但這不會檢查修剪或任何其他規則(除了要求)。 但是這種方法確實有效。

我能想到的唯一選擇是重寫你的回調,或者通過擴展form_validation類來制定你自己的規則。 我為應用程序做了擴展,它為我提供了一種更通用的驗證方式,但是它需要您深入了解CodeIgniter的核心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM