针对不同数据量的验证器

时间:2015-08-27 21:26:08

标签: php laravel laravel-5 laravel-5.1

我有一个包含不同字段数量的表单。有必要为此表单创建一个验证器,验证它们之间的所有字段都有不同的值。

<form method="POST" action="url/action">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
     @for ($i = 0; $i < $num; $i++)
         <div class='form-group'>
             <label>
                 Property №{{ $i+1 }}:
                 <select name="property{{ $i }}">
                     @foreach($properties as $property)
                         <option value="{{ $property->id }}">{{ $property->name }}</option>
                     @endforeach
                 </select>
             </label>
         </div>
     @endfor
 <input type="submit" class="btn btn-primary" value="Добавить">
</form>

表单提交的结果是创建一个具有这些属性的表,因此它们必须完全不同。

也许验证器看起来如下。

Validator::make($data, [
    'property1' => 'unique',
    'property2' => 'unique',
    ...
]);

请帮助编写验证员。

1 个答案:

答案 0 :(得分:0)

以下是此问题的解决方案。

protected function validatorForProperties(array $data)
{
    $rules = [];
    foreach ($data as $key1 => $value1) {
        $rule = 'different:';
        foreach ($data as $key2 => $value2) {
            if ($key1 != $key2)
                $rule = $rule . $key2 . ',';
        }
        $rules = array_merge($rules, [$key1 => $rule]);
    }
    return Validator::make($data, $rules);
}