2013-03-27 47 views
2

我似乎无法得到一个数组来正确验证:在我的例子中,每个音乐家必须至少有一个乐器($音乐家 - >乐器是一系列乐器)。我曾尝试通过以下方式设置验证规则,但在任何情况下(包括阵列至少有一个值时)都不会验证它们。锂校验器不处理阵列?

一个

public $validates = array(
    'name' => 'Required', 
    'instruments' => 'Required' 
); 

public $validates = array(
    'name' => 'Required', 
    'instruments' => array(
     array(
      'notEmpty', 
      'message' => 'Required' 
     ) 
    ) 
); 

甚至C未能验证

Validator::add('hasAtLeastOne', function($value) { 
    return true; 
}); 

... 

public $validates = array(
    'name' => 'Required', 
    'instruments' => array(
     array(
      'hasAtLeastOne', 
      'message' => 'Required' 
     ) 
    ) 
); 

你怎么设置它,这样如果如果数组是空的验证失败,如果计数($音乐家 - >乐器)> = 1,则通过?

回答

0

此检查所述第一器械的所述阵列中的存在,这意味着至少有一个。

public $validates = array(
    'name' => 'Required', 
    'instruments.0' => 'Required', 
); 

这不会与“乐器”字段的错误关联,所以,使其发挥好与形式,它需要被复制:

$errors = $binding->errors(); 
if ($errors['instruments.0']) { 
    $errors['instruments'] = $errors['instruments.0']; 
    unset($errors['instruments.0']); 
    $binding->errors($errors); 
} 

这不明显和不直观对我来说,但它似乎是处理验证数组的最“内置”方法。

0

锂文档:

`notEmpty`: Checks that a string contains at least one non-whitespace character. 

当你想验证一个数组,该规则不会工作你的情况。

第三个例子desont'工作或者是因为你正在测试该数组存在,而不是它是否包含任何元素。

尝试与此,它应该工作:

Validator::add('hasAtLeastOne', function($data) { 
    return count($data); 
}); 
+0

第三个示例不测试任何内容,它只是返回true。 – Rosano 2013-04-11 17:02:14