柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

laravel-admin表单验证身份证,并在编辑时忽略当前编辑行的唯一性认证

2020-01-15 admin laravel  1964

在使用laravel-admin时,我们经常要用到model-form验证规则来验证表单提交的数据,例如:

$form->text($column, [$label])->rules('required|min:10');

直接使用rules加验证规则就可以了,如果要加上正则,比如中国的18位身份证,可以这样写:

$form->text('sfzh', '身份证号')->rules(["regex:/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9X]$/"]);

另外一个常用的场景是,我们需要验证输入的身份证在数据库yuangong是否已存在,存在则不能创建更新,方法是写上unique:

$form->text('sfzh', '身份证号')->rules(["unique:yuangong",]);

不过,这个写法有一个BUG:编辑时,即使不更改身份证号码,也无法提交。原因是该身份证号码已存在了,需要在验证时,忽略该行的身份证验证才能提交。官网文档是错误的:

(['required', "unique:user_table,username,{{id}}"]);

这样并不能忽略该行数据,验证时无法通过。解决办法是使用laravel的Illuminate\Validation\Rule,方法如下:

use Illuminate\Validation\Rule;
        $form->text('sfzh', '身份证号')->rules(function ($form) {
return [
'required',
Rule::unique('yuangong')->ignore($form->model()->id),
"regex:/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9X]$/",
];
});

这样,编辑时忽略掉该行的身份证唯一认定,可以编辑成功,而且依然能保证唯一性。

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!