我在互联网上搜索过一段时间,然后在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并创建一个自定义验证规则,但我似乎无法找到一种简单有效的方法来满足我的需求。
提前感谢您的帮助。
答案 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
对我来说很好。 感谢