[Request 验证类] 排除当前页面字段验证

一直认为处理好细节可以更好的拥有体验性,无论前台后台。所以在使用Request验证类发现了一个小的细节问题,当使用unique:attrs,aname时会验证提交的内容在attrs表中查找aname字段下的值是否存在,表面上看起来没有任何问题,但是在编辑时如果不修改内容直接提交数据就会提示已经存在,如果说我想编辑数据时候突然不想编辑了,难道一定要返回才可以吗,直接点击保存数据也会拥有更好的体验性。

file

解决方法

只需要在request验证类中,unique验证规则后增加第三个参数即可,这样我们创建属性时候会验证我们填写的名称是否存在,编辑时候会通过路由获取到当前的id然后排除掉。

···
···
    public function rules()
    {

        //为了要知道排除谁不验证,应该获取当前路由里面的参数
        $id = $this->route('attr');

        //第一个参数是指定表名
        //第二个参数是指定在这个表中的那个字段要验证唯一
        //第三个参数是在验证的时候要排除的编号
        return [
            'aname' => 'required|unique:attrs,aname,' . $id['id'],
        ];
    }

    public function messages()
    {
        return [
            'aname.required' => '属性名称不能为空',
            'aname.unique' => '属性名称已存在'
        ];
    }
···
···
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

laravel 是有提供这种需求的。

'name' => ['required', 'string', Rule::unique('roles')->ignore($this->route('role'))],
6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!