validation - Laravel 5 验证多对多数据

标签 validation many-to-many laravel-5

创建新的角色时,管理员可以选择他想要分配给该角色的不同权限。将新创建的Role保存到数据库后,所选权限将同步到right_role表。

public function store(CreateRoleRequest $request) {
    $role = new Role(['name' => $request->get('name')]);

    $rights = [];
    foreach ($request->get('rights') as $id => $enabled) {
        if ($enabled) {
            $rights[] = $id;
        }
    }

    $role->save();
    $role->rights()->sync($rights);

    return redirect()->route('users.index');
}

但是如何根据不存在的值验证提交的权利?我可以在 CreateRoleRequest 中执行此操作吗?

最佳答案

这可以通过自定义验证器来完成。以下是如何在 CreateRoleRequest 中使用自定义验证器的示例

public function __construct() {
    Validator::extend("valid_rights", function($attribute, $value, $parameters) {
        $rules = [
            'right_id' => 'exists:rights,id'
        ];
        foreach ($value as $rightId) {
                $data = [
                    'right_id' => $rightId
                ];
                $validator = Validator::make($data, $rules);
                if ($validator->fails()) {
                    return false;
                }
            }
        return true;
    });
}

public function rules() {
    return [
        'containers' => 'required|valid_rights',
    ];
}

关于validation - Laravel 5 验证多对多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29811833/

相关文章:

validation - IsValid()是否可以防御XSS?

java - JoptionPane 验证遇到问题

java - 删除时 JPA "org.apache.openjpa.persistence.ArgumentException"

c# - EF 将列添加到桥接表并访问数据

laravel - 未找到类 'App\Http\Controllers\Hash'

c# - FluentValidation 正在请求 IValidator<string>

javascript - 在 Javascript 中复制 C# 服务器端验证

mysql - 如何正确索引 MySQL 中多对多连接的链接表?

javascript - 在页面加载时加载函数不会加载 Laravel 5.0

php - Laravel 5.2 一对一关系在表单提交后给出错误消息 "SQLSTATE[23000]:"