2011-02-05 96 views
0

希望是一个简单的。我有以下表单验证规则:Codeigniter - 表单验证回调订单

$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'); 

我的问题是,callback_valid_interval要求$this->input->post('timeStart')$this->input->post('timeEnd')设置。目前我的callback_valid_interval函数错误,如果用户还没有完成timeStart或timeEnd。

有没有什么办法可以设置规则之间的依赖关系,即如果其他规则未通过则不运行callback_valid_interval

或者我可以在手动检查这些字段,但想知道是否有更好的方法来做到这一点?

最好的问候,本。

回答

1

在Codeigniter规则从左到右运行,一旦失败,它会停止检查并将该字段标记为“未通过验证”,并将消息设置为第一个失败的规则。

根据您的需要,您有3个字段,所以至少您必须在所有3个字段中都有。每个字段都是独立检查的,所以不能(使用内置的form_validation类)创建比具有独立规则的字段更复杂的逻辑检查。

+0

谢谢你的回复。我会根据需要添加额外的验证。 问候,本。 – Ben 2011-02-05 23:50:44

1

不幸的是,除了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'); 
} 
+0

非常感谢您的回复。我认为这是事实,但很乐意得到第二个意见。问候,本。 – Ben 2011-02-05 23:48:56

0

使用if(真时真)方法,你想要做什么,但我要确保你知道那是什么。 set_rules不会评估规则,只有run函数会执行。 jfoucher的代码所做的就是获取帖子值,如果它们都没有设置,那么它会创建另一个规则。但是这并不检查修剪或任何其他规则(除了要求)。但是,这种方法确实有效。

我能想到的唯一选择是重写你的回调,或者通过扩展form_validation类来制定你自己的规则。我为我的应用程序做了扩展,它给了我一种更通用的验证方式,但它需要您深入了解CodeIgniter的核心。