Правило валидации Кохана (это правило ИЛИ это правило) - PullRequest
0 голосов
/ 08 февраля 2012

Я пытаюсь использовать Kohana Validation Factory следующим образом:

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

2 голосов
/ 09 февраля 2012

Есть как минимум два способа справиться с этим:

  1. Написать свой собственный обратный вызов проверки.Для этого взгляните на документы .
  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 голос
/ 09 февраля 2012

Вот другая версия подхода @ 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();
}
...