[英]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.