Laravel 验证表单数组

需求:在创建用户的时候,选择用户的角色(可以不选/单选/多选),用户角色是一个包含角色 id 的数组。

表单内容:

<input type="checkbox" name="roles[]" value="{{ $v->id }}"> {{ $v->name }}

自定义 Request rules() 方法:

public function rules()
{
    $rules = [
        'name' => 'required|max:255|unique:users,name',
        'email' => 'required|email|max:255|unique:users,email',
        'password' => 'required|max:255',
        'active' => 'boolean',
        'admin' => 'boolean',
        // 'roles' => 'numeric|exists:roles,id', 错误的方法
    ];
    if ( $this->request->get('roles') )
    {
        foreach( $this->request->get('roles') as $k=>$v )
        {
            $rules['roles.'.$k] = 'numeric|exists:roles,id';
        }
    }
    return $rules;
}

当 role id 不存在报错:The selected roles.0 is invalid.

以上的方法用于 laravel 5.1,在 5.2 中可以直接使用 'roles.*' => 'numeric|exists:roles,id', 来验证。