最近我遇到了如下情況:如何執行多個字段的驗證?
有一個表格有三個輸入。他們都有相關的數據庫屬性(值)。 現在:至少需要其中一個,但它可以是其中任何一個。
什麼可能是最聰明的方式(最好遵循Kohana和/或ORM的指導方針)這樣做? 我希望這個「規則」存儲在模型中,而不是存儲在控制器中。
到目前爲止,我已經設法將自定義規則應用於所有三個字段,但是這會導致tripple錯誤消息,每個字段一個。
如果需要更多的細節 - 請讓我知道。
最近我遇到了如下情況:如何執行多個字段的驗證?
有一個表格有三個輸入。他們都有相關的數據庫屬性(值)。 現在:至少需要其中一個,但它可以是其中任何一個。
什麼可能是最聰明的方式(最好遵循Kohana和/或ORM的指導方針)這樣做? 我希望這個「規則」存儲在模型中,而不是存儲在控制器中。
到目前爲止,我已經設法將自定義規則應用於所有三個字段,但是這會導致tripple錯誤消息,每個字段一個。
如果需要更多的細節 - 請讓我知道。
我覺得這是你所需要的
// File: application/classes/helper/validation.php
class Helper_Validation {
public static function one_not_empty($array, $keys)
{
if(! is_array($keys))
{
// throw new Exception('Helper_Validation::one_not_empty expects an array');
return FALSE;
}
foreach($keys as $key)
{
// Change this IF to whatever is the required value
if(Arr::get($array, $key) !== NULL)
{
return TRUE;
}
}
return FALSE;
}
}
現在,它適用於所有領域:
$keys = array('field1', 'field2', 'field3');
$validation = Validation::factory($array)
->rule('field1', 'Helper_Validation::one_not_empty', array($keys))
->rule('field2', 'Helper_Validation::one_not_empty', array($keys))
->rule('field3', 'Helper_Validation::one_not_empty', array($keys));
我認爲這應該工作,沒有測試雖然讓我們知道:)
試試這個
public function rules(){
return array(
'field1' => array(
array('at_least', array($this, 1, array('field1', 'field2', 'field3'))),
),
'field2' => array(
array('at_least', array($this, 1, array('field1', 'field2', 'field3'))),
),
'field3' => array(
array('at_least', array($this, 1, array('field1', 'field2', 'field3'))),
),
);
}
public static function at_least($array, $needed = 1, $fields){
$found = 0;
foreach ($fields as $field){
if (isset($array[$field]) AND Valid::not_empty($array[$field])){
$found++;
}
}
return ($found >= $needed);
}
看起來很有前途,並以另一種方式處理它。謝謝!我會很快嘗試你的代碼/想法,然後再次評論並批准答案。 – roomcays