表单验证需要两个字段或第三个字段

Form Validation required either two fields or a third one

我在互联网上和 Whosebug 上搜索了一段时间。 我发现了类似的需求,但我很难根据我的特定需求调整这些解决方案。

我正在使用 CodeIgniter 2,并且我已经创建了一个表单。 我正在使用 form_validation 来验证字段中输入的每个值。

现在,我有两个字段用于一段时间,第三个字段用于文件 ID。

用户必须填写 [时间段] 字段和/或 [文件 ID] 字段。

    $this->form_validation->set_rules('idx_start', 'lang:idx_start', 'trim');           
    $this->form_validation->set_rules('idx_end', 'lang:idx_end', 'trim');       
    $this->form_validation->set_rules('fileID', 'lang:fileID', 'trim');

我试图研究回调并创建自定义验证规则,但我似乎无法找到一种简单有效的方法来满足我的需要。

在此先感谢您的帮助。

您总是可以创建不同的规则数组。我在几个项目中这样做。

所以在你的控制器中是这样的:

if($condition1){
    $rules = $this->my_model->rules1;
} else {
    $rules = $this->my_model->rules2;
}
$this->form_validation->set_rules($rules);

'my_model' 中的 $rules1 和 $rules2 看起来像这样:

public $rules1 = array(
    'idx_start' => array(
        'field' => 'idx_start',
        'label' => 'start',
        'rules' => 'trim|required'
    ),
    'idx_end' => array(
        'field' => 'idx_end',
        'label' => 'end',
        'rules' => 'trim|required'
    ),
    'fileID' => array(
        'field' => 'fileID',
        'label' => 'file id',
        'rules' => 'trim'
    )
);

public $rules2 = array(
    'idx_start' => array(
        'field' => 'idx_start',
        'label' => 'start',
        'rules' => 'trim'
    ),
    'idx_end' => array(
        'field' => 'idx_end',
        'label' => 'end',
        'rules' => 'trim'
    ),
    'fileID' => array(
        'field' => 'fileID',
        'label' => 'file id',
        'rules' => 'trim|required'
    )
);

或者无论如何他们需要。希望这对您有所帮助!

可能有更好的方法,但这可能行得通:

$this->form_validation->set_rules('fileID', 'lang:fileID', 'trim')
if ( $this->form_validation->run() != true  ) {
    $this->form_validation->set_rules('idx_start', 'lang:idx_start', 'trim');           
    $this->form_validation->set_rules('idx_end', 'lang:idx_end', 'trim');
}
if ( $this->form_validation->run() == false  ) {
    // form failed
} else {
    // form passed
}

我已经使用了以下添加到 CodeIgniter 来满足我的特定需要。 http://forum.codeigniter.com/thread-22443.html

对我来说很好用。 谢谢