使用CodeIgniter的Form_validation
類時,set_rules()
方法允許用戶向其表單字段添加無限數量的檢查。這些規則通常都在調用run()
方法之前在同一個地方定義。
VALID例:
// Require the user to be a werewolf.
$this->form_validation->set_rules('werewolf', 'Are you a Werewolf?', 'required');
// If the form validates.
if ($this->form_validation->run())
{
// [...]
(不,我不實際運行狼人網站)
該代碼使得很多的感覺,是很容易理解的。但是,有時候,這可能是不可取的。例如,也許你不在乎用戶是否是狼人,除非是午夜。您的代碼可能會是這樣的:
invalid範例
// If it is midnight.
if (date('G') == '0')
{
// Require the user to be a werewolf.
$this->form_validation->set_rules('werewolf', 'Are you a Werewolf?', 'required');
}
// If the form validates.
if ($this->form_validation->run())
{
// [...]
此都不行
至少,它不會到午夜工作。
默認情況下,如果沒有聲明任何規則,$this->form_validation->run()
返回FALSE
。在第二個示例中,除非是午夜,否則不會有任何規則設置,因此表單將永遠不會生效。從邏輯上講,人們會假設如果沒有規則,表單應該確認無論如何。相反,它失敗無論如何。
/系統/庫/ Form_validation :: run()的
(線293-297)
// No validation rules? We're done...
if (count($this->_config_rules) == 0)
{
return FALSE;
}
我的問題是:
這是爲什麼默認返回值?如果我改變它可以嗎?
你通常不希望驗證時,你有沒有規則把數據靠在。在這種情況下返回FALSE表明出現了問題:沒有找到「規則」。我可以看到這在使用動態規則集時非常有用(不是我可以想到這些用法)。 – L7Lynx
在我的情況下,我試圖要求一個字段,當且僅當一個文件與表單一起提交時。當我意識到必須在沒有互聯網批准的情況下更換系統功能時,我非常擔心! – Nathanael