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

时间:2015-05-07 13:28:56

标签: php codeigniter codeigniter-2

我在互联网上搜索过一段时间,然后在StackOverflow上搜索。 我发现了类似的需求,但我很难根据自己的需要调整这些解决方案。

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

现在,我有2个字段用于一段时间,第三个字段用于fileID。

用户必须填写[时间段]字段或[fileID]字段,或两者都填写。

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

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

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

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

你的控制器里有这样的东西:

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

或者他们需要。希望这有帮助!

答案 1 :(得分:0)

可能有更好的方法,但这可能适用于imho:

$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
}

答案 2 :(得分:0)

我已根据我的具体需要使用以下添加到CodeIgniter。 http://forum.codeigniter.com/thread-22443.html

对我来说很好。 感谢