Kohana验证规则(此规则或该规则)

时间:2012-02-08 19:44:01

标签: validation kohana

我试图以这种方式使用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");
}

但如果可以,我想避免这样做。

2 个答案:

答案 0 :(得分:2)

至少有两种方法可以解决这个问题:

  1. 编写自己的验证回调。请查看docs
  2. 只需添加您需要的规则
  3. $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();
}