laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
confirmed
验证字段必须有一个匹配字段foo_confirmation,例如,如果验证字段是password,必须输入一个与之匹配的password_confirmation字段。
same:field
给定字段和验证字段必须匹配
protected $fillable = ['name', 'password'];
public static $rules = [
'name' = 'required|unique:managers',
'password' = 'required|confirmed',
'password_confirmation' = 'required|same:password'
];
public static function error_message()
{
return [
'name.required' = __('tyvalidation.name'),
'name.unique' = __('tyvalidation.unique'),
'password.required' = __('tyvalidation.password'),
'password.confirmed' = __('tyvalidation.confirmed'),
];
}
public function setPasswordAttribute($value)
{
$this- attributes['password'] = Hash::make($value);
}
经验证,上面的验证方式在update的时候会出问题,修改的时候会验证unique,导致不能保存,所以需要修改下。
官网说:
Sometimes, you may wish to ignore a given ID during the unique check. For example, consider an “update profile” screen that includes the user’s name, e-mail address, and location. Of course, you will want to verify that the e-mail address is unique. However, if the user only changes the name field and not the e-mail field, you do not want a validation error to be thrown because the user is already the owner of the e-mail address. To instruct the validator to ignore the user’s ID, we’ll use theRuleclass to fluently define the rule. In this example, we’ll also specify the validation rules as an array instead of using the|character to delimit the rules:
重要的2句话是:
有时,您可能希望在唯一检查期间忽略给定的ID。
当然,您需要验证电子邮件地址是否唯一。但是,如果用户仅更改名称字段而不更改电子邮件字段,则不希望抛出验证错误,因为用户已经是电子邮件地址的所有者,为了指示验证者忽略用户的ID,我们将使用Rule该类来流畅地定义规则。
use IlluminateValidationRule;
Validator::make($data, [
'email' = [
'required',
Rule::unique('users')- ignore($user- id),
],
]);
所以修改为
'name' = [
'required',
Rule::unique('managers')- ignore($id),
],
在更新密码时,我们需要验证旧的密码是否正确,那我们需要使用自定义验证。
Using Closures
If you only need the functionality of a custom rule once throughout your application, you may use a Closure instead of a rule object. The Closure receives the attribute’s name, the attribute’s value, and a$failcallback that should be called if validation fails:
Closure接收属性的名称,属性的值以及$fail
在验证失败时应调用的回调。
$validator = Validator::make($request- all(), [
'title' = [
'required',
'max:255',
function($attribute, $value, $fail) {
if ($value === 'foo') {
return $fail($attribute.' is invalid.');
}
},
],
]);
所以密码是否正确可以这样验证
'old_password' = [
'required',
function($attribute, $value, $fail) use ($manager)
{
if (!Hash::check($value, $manager- password))
{
return $fail(__('tyvalidation.old_password'));
}
},
],
所有代码如下:
create.html
<div class="form-group"
<label {!! __('tycms.name') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="text" class="form-control is-invalid" name="name" value="" placeholder="{!! __('tycms.name') !!}" required /
@foreach ($errors- get('name') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
<div class="form-group"
<label {!! __('tycms.password') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="password" class="form-control is-invalid" name="password" value="" placeholder="{!! __('tycms.password') !!}" required /
@foreach ($errors- get('password') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
<div class="form-group"
<label {!! __('tycms.confirm_password') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="password" class="form-control is-invalid" name="password_confirmation" value="" placeholder="{!! __('tycms.confirm_password') !!}" required /
@foreach ($errors- get('password') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
store
$input_all = $request- all();
$validator = Validator::make($input_all, Manager::rules(), Manager::error_message());
if ($validator- fails())
{
return redirect()
- action($this- class_basename . '@create')
- withErrors($validator)
- withInput();
}
$model = Manager::create($input_all);
edit.html
<div class="form-group"
<label {!! __('tycms.name') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="text" class="form-control is-invalid" name="name" value="{{ $model- name }}" readonly="readonly" placeholder="{!! __('tycms.name') !!}" required /
@foreach ($errors- get('name') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
<div class="form-group"
<label {!! __('tycms.old_password') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="password" class="form-control is-invalid" name="old_password" value="" placeholder="{!! __('tycms.old_password') !!}" required /
@foreach ($errors- get('old_password') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
<div class="form-group"
<label {!! __('tycms.password') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="password" class="form-control is-invalid" name="password" value="" placeholder="{!! __('tycms.password') !!}" required /
@foreach ($errors- get('password') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
<div class="form-group"
<label {!! __('tycms.confirm_password') !!}</label
<div class="input-group"
<div class="input-group-prepend"
<span class="input-group-text change-bg" T</span
</div
<input type="password" class="form-control is-invalid" name="password_confirmation" value="" placeholder="{!! __('tycms.confirm_password') !!}" required /
@foreach ($errors- get('password') as $message)
<div class="invalid-feedback"
{{ $message }}
</div
@endforeach
</div
</div
update
$input_all = $request- all();
$model = $this- findById($id);
$validator = Validator::make($input_all, Manager::rules($id, $model), Manager::error_message());
if ($validator- fails())
{
return redirect()
- action($this- class_basename . '@edit', ['id' = $id])
- withErrors($validator)
- withInput();
}
$model- fill($input_all);
$model- save();
ModelsManager
protected $table = 'managers';
protected $fillable = ['name', 'password'];
/*public static $rules = [
'name' = 'required|unique:managers',
'password' = 'required|confirmed',
'password_confirmation' = 'required|same:password'
];*/
public static function rules ($id = null, $manager = null)
{
if (empty($id))
{
$rules = [
'name' = 'required|unique:managers',
'password' = 'required|confirmed',
'password_confirmation' = 'required|same:password'
];
} else
{
$rules = [
'name' = [
'required',
Rule::unique('managers')- ignore($id),
],
'old_password' = [
'required',
function($attribute, $value, $fail) use ($manager)
{
if (!Hash::check($value, $manager- password))
{
return $fail(__('tyvalidation.old_password'));
}
},
],
'password' = 'required|confirmed',
'password_confirmation' = 'required|same:password'
];
}
return $rules;
}
public static function error_message()
{
return [
'name.required' = __('tyvalidation.name'),
'name.unique' = __('tyvalidation.unique'),
'password.required' = __('tyvalidation.password'),
'password.confirmed' = __('tyvalidation.confirmed'),
];
}
public function setPasswordAttribute($value)
{
$this- attributes['password'] = Hash::make($value);
}
以上就是本文的全部内容,希望对大家的学习有所帮助。
- HDU 5752 Sqrt Bo【枚举,大水题】
- 移动测试 Appium源码初探
- UESTC 1599 wtmsb【优先队列+排序】
- BZOJ 1029: [JSOI2007]建筑抢修【优先队列+贪心策略】
- UVA 1030 - Image Is Everything【模拟+思维+迭代更新】
- C/C++中对链表操作的理解&&实例分析
- COGS 2482. Franky的胡子【二分,高精度】
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战02】理解gym的建模思想
- Kruscal(最小生成树)算法模版
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
- 区块链概况:什么是比特币
- 简化版桶排序操作模版
- BZOJ 3670: [Noi2014]动物园【KMP变形 】
- 【延迟注入】A5站长网某站存在SQL注入漏洞
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- JsonPath工具类封装
- Ubuntu16.04 实时内核 RT Preempt 安装
- c语言实现整数转换为字符串——不考虑负数
- JsonPath工具类单元测试
- Selenium4 IDE特性:无代码趋势和SIDE Runner
- 浮点数转成字符串函数gcvt()
- moco固定QPS接口升级补偿机制
- 大小端示例-arm c51
- #define的一个小技巧
- 干货 | 手把手教你用115行代码做个数独解析器!
- Ubuntu18.04 ROS安装小记
- 面试题系列第7篇:Java方法到底是值传递还是引用传递?
- input输入框内容规范正则总结
- 【干货满满】1.5w字初中级前端面试复习总结
- 娱乐圈排行榜动态条形图绘制