【问题标题】:Form Validation required either two fields or a third one表单验证需要两个字段或第三个字段
【发布时间】:2015-05-07 13:28:55
【问题描述】:

我在 Internet 和 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');

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

提前感谢您的帮助。

【问题讨论】:

  • 我认为,你应该通过自己的代码来验证这样的规则,而不是通过验证类。或者扩展它

标签: php codeigniter codeigniter-2


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    可能有更好的方法,但恕我直言:

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

    【讨论】:

      【解决方案3】:

      我已经使用以下 Add in to CodeIgniter 来满足我的特定需求。 http://forum.codeigniter.com/thread-22443.html

      对我来说很好用。 谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 2022-01-17
        • 2017-06-02
        相关资源
        最近更新 更多