laravel unique驗(yàn)證、確認(rèn)密碼confirmed驗(yàn)證以及密碼修改驗(yàn)證的方法
confirmed
驗(yàn)證字段必須有一個(gè)匹配字段 foo_confirmation,例如,如果驗(yàn)證字段是 password,必須輸入一個(gè)與之匹配的 password_confirmation 字段。
same:field
給定字段和驗(yàn)證字段必須匹配
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);
}
經(jīng)驗(yàn)證,上面的驗(yàn)證方式在update的時(shí)候會(huì)出問題,修改的時(shí)候會(huì)驗(yàn)證unique,導(dǎo)致不能保存,所以需要修改下。
官網(wǎng)說:
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 the Rule class 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句話是:
有時(shí),您可能希望在唯一檢查期間忽略給定的ID。
當(dāng)然,您需要驗(yàn)證電子郵件地址是否唯一。但是,如果用戶僅更改名稱字段而不更改電子郵件字段,則不希望拋出驗(yàn)證錯(cuò)誤,因?yàn)橛脩粢呀?jīng)是電子郵件地址的所有者,為了指示驗(yàn)證者忽略用戶的ID,我們將使用Rule該類來流暢地定義規(guī)則。
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
所以修改為
'name' => [
'required',
Rule::unique('managers')->ignore($id),
],
在更新密碼時(shí),我們需要驗(yàn)證舊的密碼是否正確,那我們需要使用自定義驗(yàn)證。
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 $fail callback that should be called if validation fails:
Closure接收屬性的名稱,屬性的值以及$fail在驗(yàn)證失敗時(shí)應(yīng)調(diào)用的回調(diào)。
$validator = Validator::make($request->all(), [
'title' => [
'required',
'max:255',
function($attribute, $value, $fail) {
if ($value === 'foo') {
return $fail($attribute.' is invalid.');
}
},
],
]);
所以密碼是否正確可以這樣驗(yàn)證
'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();
Models\Manager
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);
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
php中配置文件保存修改操作 如config.php文件的讀取修改等操作
有時(shí)候我們需要用php將一些配置參數(shù)寫到文件里面,方便后期讀取使用,這里就為大家分享一下具體的實(shí)現(xiàn)代碼,需要的朋友可以參考一下2021-05-05
在Laravel中實(shí)現(xiàn)使用AJAX動(dòng)態(tài)刷新部分頁面
今天小編就為大家分享一篇在Laravel中實(shí)現(xiàn)使用AJAX動(dòng)態(tài)刷新部分頁面,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
Laravel 實(shí)現(xiàn)Controller向blade前臺(tái)模板賦值的四種方式小結(jié)
今天小編就為大家分享一篇Laravel 實(shí)現(xiàn)Controller向blade前臺(tái)模板賦值的四種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10
PHP讀取Excel內(nèi)的圖片(phpspreadsheet和PHPExcel擴(kuò)展庫)
今天接到了一個(gè)從Excel內(nèi)讀取圖片的需求,這里介紹一下分別使用phpspreadsheet和PHPExcel擴(kuò)展庫來實(shí)現(xiàn)讀取Excel內(nèi)圖片的功能,感興趣的朋友一起看看吧2019-11-11

