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

时间:2017-08-30 06:05:46

标签: php laravel laravel-5.4 laravel-validation

我的控制器如下:

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":["该名称已被采用。"]}

2 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助!

答案 1 :(得分:1)

在表单请求中,您可以通过两个方式获取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,
    ];
}

或者我们也可以使用段来获取路径中的id

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