最近我遇到了如下情况:
有一个带有三个输入的表单。它们都具有相关的数据库属性(值)。现在:至少需要其中一个,但可以是其中任何一个。
这样做的最聪明的方法是什么(最好遵循 Kohana 和/或 ORM 的指导方针)?我希望这个“规则”存储在模型中,而不是控制器中。
到目前为止,我已经设法将自定义规则应用于所有三个字段,但这会导致三重错误消息,每个字段都有一个。
如果需要更多详细信息 - 请告诉我。
最近我遇到了如下情况:
有一个带有三个输入的表单。它们都具有相关的数据库属性(值)。现在:至少需要其中一个,但可以是其中任何一个。
这样做的最聪明的方法是什么(最好遵循 Kohana 和/或 ORM 的指导方针)?我希望这个“规则”存储在模型中,而不是控制器中。
到目前为止,我已经设法将自定义规则应用于所有三个字段,但这会导致三重错误消息,每个字段都有一个。
如果需要更多详细信息 - 请告诉我。
我认为这就是你需要的
// 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);
}