Laravel 在表单请求中强制唯一角色验证失败

Laravel force unique role validation fail in form request

我的控制器如下:

public function update(PermissionFormRequest $request,$id)
{
    $permissionUpdated = $this->permission->update($request,$id);
    if($permissionUpdated){
        //return $permissionUpdated;
        return 'updated';
    }
    return response()->json(['message' => 'Can not update ticket']);    
}

表单请求代码为:

public function rules()
{
    return [
        'name' =>'required|unique:permissions,name,'.$this->id,
    ];
}

尝试使用 相同 ID 更新时,抛出错误:

{"name":["The name has already been taken."]}

要获取 Request 中的 id,您可以使用 route() 方法。请记住,在 routes.php 文件中使用的 route('id') 中使用参数名称!

public function rules()
{
    $id = $this->route('id'); //or whatever it is named in the route
    return [
        'name' =>'required|unique:permissions,name,'.$id,
    ];
}

希望对您有所帮助!

在表单请求中,您可以通过两种方式获取 id,一种是 segment,另一种是 route() 函数。

如果您正在使用像

这样的资源控制器

Route::resource('permissions','PermissionController'); 然后 $this->route('permission');

您正在使用自定义路线,例如 /permissions/{id} 然后 $this->route('id');

public function rules()
{
    $id = $this->route('permission');
    return [
        'name' =>'required|unique:permissions,name,'.$id,
    ];
}

或者我们也可以使用 segment 从路由中获取 id

public function rules()
{
    $id = $this->segment(3);
    return [
        'name' =>'required|unique:permissions,name,'.$id,
    ];
}