我试图以这种方式使用Kohana验证工厂:
$post = validation::factory($_POST)
->rule('payorid', 'not_empty')
->rule('payortype', 'not_empty')
->rule('individual_first_name','not_empty')
->rule('individual_last_name','not_empty')
OR
->rule('orgname','not_empty');
在最后三条规则中,我希望它能使前两个正确或最后一个正确。
因此,如果用户提供名字和姓氏就可以,或者如果用户只提供一个orgname就可以了。
我可以用像这个长怪物的if语句来做到这一点:
if((!isset($_POST['individual_first_name'])&&!isset($_POST['individual_last_name']))||(!isset($_POST['orgname'])))
{
exit("A name is empty");
}
但如果可以,我想避免这样做。
答案 0 :(得分:2)
至少有两种方法可以解决这个问题:
$post = validation::factory($_POST)
->rule('payorid', 'not_empty')
->rule('payortype', 'not_empty');
if ( ! empty($this->request->post('orgname')))
{
$post->rule('orgname','not_empty');
}
else
{
$post->rule('individual_first_name','not_empty')
->rule('individual_last_name','not_empty');
}
我建议回调。
答案 1 :(得分:1)
这是@ Thornsten方法的不同版本,验证名字和姓氏,然后验证orgname。 (例如,如果您想添加其他验证规则。)
$org_validate = Validation::factory($_POST)
->rule('orgname','not_empty');
$name_validate = Validation::factory($_POST)
->rule('individual_first_name','not_empty')
->rule('individual_last_name','not_empty');
$post = Validation::factory($_POST)
->rule('payorid', 'not_empty')
->rule('payortype', 'not_empty');
$errors = array();
if (!$post->check())
{
$errors = $errors + $post->errors();
}
if (!$name_validate->check() AND !$org_validate->check())
{
$errors = $errors + $name_validate->errors() + $org_validate->errors();
}