在laravel中创建手动验证器时,您可以附加在验证完成后运行的回调,如下所示:
$validator = Validator::make(...);
$validator->after(function($validator) {
if (!Auth::validate(['email' => Auth::user()->email, 'password' => $this->input('old_password')]))
{
$validator->errors()->add('old_password', 'Invalid password');
}
});
如何在表单请求中执行相同操作,即在下面的表单请求示例中添加上述回调函数的位置?
class AccountRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'new_password' => 'required|confirmed|min:6';
'old_password' => 'required';
];
}
}
答案 0 :(得分:0)
参考评论,您需要验证旧密码是否等于DB中的现有字段,以及新密码=确认密码。
要实现这一目标,请首先为旧密码构建客户验证器:
<?php
namespace App\Providers;
use Validator;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Validator::extend('existing', function($attribute, $value, $parameters, $validator) {
return \Hash::check($value, User::find($parameters[0])->password);
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
然后在您的表格申请中:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class FormRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'old' => 'existing:'.\Auth::user()->id,
'password' => 'confirmed|required_with:old'
];
}
public function messages()
{
return [
'old.existing' => 'Wrong old password'
];
}
}
答案 1 :(得分:0)
您可以尝试添加public function after($request)
,并检查是否有效。