2012-02-08 145 views
0

我試圖用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

至少有兩種方法來處理是:

  1. 寫自己的驗證回調。看看這個docs
  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'); 
}

我建議回調,但該規則。

+0

非常感謝。 – user1014925 2012-02-10 21:17:27

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(); 
}